Получить methodinfo для Enumerable.DefaultIfEmpty - PullRequest
4 голосов
/ 17 июня 2011

Я создаю некоторое выражение Linq и пытаюсь заполучить MethodInfo для IEnumerable.DefaultIfEmpty (http://msdn.microsoft.com/en-us/library/bb360179.aspx).. Это казалось простой задачей, но я не понимаю, почему она не работает.

typeof(Enumerable).GetMethod("DefaultIfEmpty", new[] { typeof(IEnumerable<>) });

typeof(Enumerable).GetMethod("DefaultIfEmpty", new[] { typeof(IEnumerable<>).MakeGenericType(typeof(WorkitemListModel)) });

1 Ответ

5 голосов
/ 17 июня 2011

Получение общих методов - это боль, если честно.Я не знаю лучшего способа, чем использовать:

var method = typeof(Enumerable).GetMethods()
                               .Where(m => m.Name == "DefaultIfEmpty")
                               .Where(m => m.GetParameters().Length == 1)
                               .Single();

Чтобы вызвать GetMethod, вам потребуется точный правильный тип параметра, включая правильный параметр универсального типа для параметра.Как только вы получите это один раз , вы можете сделать это, но до тех пор я думаю, что все, что доступно, доступно выше: (

...