2016-12-26 3 views
0

Я новичок в отражении, и я пытался ниже peice кодаC# GetMethod Информация о Queryable класса

var queryableLastMethodInfo = typeof(Queryable).GetMethod("Last", new Type[]{ typeof(IQueryable<>) }); 

но queryableLastMethodInfo всегда возвращает нулевой.

Не могли бы вы помочь?

+0

@ RafaelDiaz: да? Методы не имеют пространств имен. – siride

+0

Мне действительно интересно, какой именно план с этим конкретным фрагментом кода ... – siride

ответ

3

Это должно дать вам MethodInfo «последнего» метода расширения, который не принимает предикат:

var queryableLastMethodInfo = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) 
    .FirstOrDefault(x => x.Name == "Last" && x.GetParameters().Count() == 1); 

... и это должно дать вам другую:

var queryableLastMethodInfo = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) 
    .FirstOrDefault(x => x.Name == "Last" && x.GetParameters().Count() == 2); 
1

Вы можете найти все Последние методы и выбрать один только с одним параметром:

var method = typeof (Queryable).GetMethods() 
           .Where(m => m.Name == "Last") 
           .First(m => m.GetParameters().Length == 1); 

Общий случай описан в this question and answer.

0

Не используйте код риска, если Queryable принимает новые методы под названием «Last» и принимает только один параметр.

Точный никогда не бывает многого.

var queryableLastMethodInfo = typeof(Queryable).GetMethods().Single(_Method => _Method.Name == "Last" && _Method.IsGenericMethod && _Method.GetGenericArguments().Length == 1 && _Method.GetParameters().Length == 1 && _Method.GetParameters().Single().ParameterType == typeof(IQueryable<>).MakeGenericType(_Method.GetGenericArguments().Single())); 

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

  • Нет связанных вопросов^_^