可查询类的C#GetMethod信息

时间:2016-12-26 18:20:57

标签: c# reflection types typeof getmethod

我是Reflection的新手,我正在尝试下面的代码

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

queryableLastMethodInfo 始终返回 null

你能帮忙吗?

3 个答案:

答案 0 :(得分:3)

这应该为您提供不带谓词的“Last”扩展方法的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 :(得分:1)

您可以找到所有 Last 方法,并选择只有一个参数的方法:

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

Mozilla Developer Network中描述了通用案例。

答案 2 :(得分: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()));