Вы можете создать метод расширения, который выполняет поиск всех методов и их фильтрацию, чтобы вернуть желаемый общий метод.
public static class TypeExtensions
{
private class SimpleTypeComparer : IEqualityComparer<Type>
{
public bool Equals(Type x, Type y)
{
return x.Assembly == y.Assembly &&
x.Namespace == y.Namespace &&
x.Name == y.Name;
}
public int GetHashCode(Type obj)
{
throw new NotImplementedException();
}
}
public static MethodInfo GetGenericMethod(this Type type, string name, Type[] parameterTypes)
{
var methods = type.GetMethods();
foreach (var method in methods.Where(m => m.Name == name))
{
var methodParameterTypes = method.GetParameters().Select(p => p.ParameterType).ToArray();
if (methodParameterTypes.SequenceEqual(parameterTypes, new SimpleTypeComparer()))
{
return method;
}
}
return null;
}
}
Использование метода расширения выше, вы можете написать код, подобный тому, что вы намеревались:
MethodInfo method = typeof(Enumerable).GetGenericMethod("Any", new[] { typeof(IEnumerable<>), typeof(Func<,>) });
возможно дубликат [Получить универсальный метод без использования GetMethods] (http://stackoverflow.com/вопросы/269578/наймите-родовой-метод-без использования-GetMethods) – nawfal 2013-10-08 10:58:47