我正在尝试创建一个Expression
将调用特定泛型重载方法的方法(Enumerable.Average
在我的第一个测试用例中)。但是,直到运行时才知道特定的类型绑定,因此我需要使用它Reflection
来查找并创建正确的泛型方法(Expression
从解析的文本中创建)。
因此,如果我在运行时知道我想找到这个特定的重载:
public static double Average<TSource>(this IEnumerable<TSource> source, Func<TSource, int> selector)
如何MethodInfo
使用反射解决这个问题?
到目前为止,我有以下选择声明:
MethodInfo GetMethod(Type argType, Type returnType)
{
var methods = from method in typeof(Enumerable).GetMethods(BindingFlags.Public | BindingFlags.Static)
where method.Name == "Average" &&
method.ContainsGenericParameters &&
method.GetParameters().Length == 2 &&
// and some condition where method.GetParameters()[1] is a Func that returns type argType
method.ReturnType == returnType
select method;
Debug.Assert(methods.Count() == 1);
return methods.FirstOrDefault();
}
以上将其缩小为三个重载,但我想反映并找到需要Func<TSource, int>
where的特定重载argType == typeof(int)
。
我很难过,任何帮助表示赞赏。