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();
}
上記は 3 つのオーバーロードに絞り込みますが、Func<TSource, int>
whereを取る特定のオーバーロードを反映して見つけたいと思いますargType == typeof(int)
。
私は困惑しており、どんな助けも大歓迎です。