可查询的 C# GetMethod 信息 class
C# GetMethod info of Queryable class
我是 Reflection 的新手,我正在尝试下面的代码
var queryableLastMethodInfo = typeof(Queryable).GetMethod("Last", new Type[]{ typeof(IQueryable<>) });
但 queryableLastMethodInfo 总是 returns null.
你能帮忙吗?
您可以找到所有 Last 方法和 select 只有一个参数的方法:
var method = typeof (Queryable).GetMethods()
.Where(m => m.Name == "Last")
.First(m => m.GetParameters().Length == 1);
this question and answer 中描述了一般情况。
这应该为您提供 "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);
如果 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()));
我是 Reflection 的新手,我正在尝试下面的代码
var queryableLastMethodInfo = typeof(Queryable).GetMethod("Last", new Type[]{ typeof(IQueryable<>) });
但 queryableLastMethodInfo 总是 returns null.
你能帮忙吗?
您可以找到所有 Last 方法和 select 只有一个参数的方法:
var method = typeof (Queryable).GetMethods()
.Where(m => m.Name == "Last")
.First(m => m.GetParameters().Length == 1);
this question and answer 中描述了一般情况。
这应该为您提供 "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);
如果 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()));