2014-09-13 2 views
1

У меня есть коллекция ICollection<T>, и мне нужно найти метод «Где». Как я мог это сделать?Получить MethodInfo для ICollection <T>

Я пытался что-то вроде этого:

System.Type type = typeof(ICollection<T>); 
MethodInfo info = type.GetGenericTypeDefinition().GetMethod("Where"); 

, но он не работает. Мне это нужно, чтобы создать динамическое выражение

ответ

0

Вам нужно

typeof(ICollection<>); 

, чтобы получить тип ICollection<T> .Но, метод Where не определен в ICollection<T> .Вы должны получить метод от статического Enumerable класса.

3

Это метод расширения, поэтому это не на самом интерфейсе, но на Enumerable классе:

typeof(Enumerable).GetMethods("Where", BindingFlags.Static | BindingFlags.Public) 

Затем выберите перегрузку вам нужно.

+0

Приятно, как я мог избежать двусмысленной пригодности для работы в случае, если есть много определений Where (...)? – Puchacz

+0

Вы можете использовать 'Where', чтобы отфильтровать результаты' GetMethods', или, что более серьезно, вы можете использовать перегрузку GetMethod, которая принимает массив типов параметров в качестве аргумента для устранения неоднозначности перегрузок. Передайте все типы параметров перегрузки, которые вы ищете. –

Смежные вопросы