Как найти конкретную общую перегрузку с помощью отражения?
Я пытаюсь создатьExpression
это вызовет определенный универсальный перегруженный метод (Enumerable.Average
в моем первом тестовом случае). Тем не менее, конкретные привязки типов не известны до времени выполнения, поэтому мне нужно использоватьReflection
найти и создать правильный универсальный метод (Expression
создается из разобранного текста).
Так что, если я знаю во время выполнения, что я хочу найти эту конкретную перегрузку:
public static double Average(this IEnumerable source, Func 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
где .argType == typeof(int)
Я в тупике, и любая помощь приветствуется.