C# 测试是否可以在参数列表上调用泛型方法

C# 测试是否可以在参数列表上调用泛型方法,c#,generics,reflection,system.reflection,C#,Generics,Reflection,System.reflection,假设我有一个泛型方法(通过反射从父类型检索): 显然,答案是肯定的 但是,我想找到一种通用方法找到与参数列表匹配的最佳重载(在几个泛型中) 我可以轻松获得所有方法: MyType.GetMethods().Where(m => m.Name == "MyMethod") 然后筛选以匹配参数计数: .Where(m => m.GetParameters().Count() == 3) 但是我被封锁了 [根据评论中的要求进行编辑] var methods = typeof(Array

假设我有一个泛型方法(通过反射从父类型检索):

显然,答案是肯定的

但是,我想找到一种通用方法找到与参数列表匹配的最佳重载(在几个泛型中)

我可以轻松获得所有方法:

MyType.GetMethods().Where(m => m.Name == "MyMethod")
然后筛选以匹配参数计数:

.Where(m => m.GetParameters().Count() == 3)
但是我被封锁了

[根据评论中的要求进行编辑]

var methods = typeof(Array).GetMethods();
var sortMethods = methods.Where(m => m.Name == "Sort");
var candidates = sortMethods.Where(m => m.GetParameters().Count() == 3);

var parameterTypes = new Type[] { typeof(byte).MakeArrayType(), typeof(Int32), typeof(Int32) };

foreach(var m in candidates)
{
    // find the best match
}
我有4种方法:


我不知道如何通过编程找到最佳匹配

基本上,如果
[MethodParameterType].IsAssignableFrom([TypeToTest])
方法可以用给定的类型集调用,那么检查每个参数就足够了。谢谢@Thehenny,但它不适用于t[]和byte[]。IsAssignableFrom对于array type和elementTypesCan返回false您显示了一个多个方法的示例,您希望在其中找到一个最佳方法?完成。但是请记住,我不想仅仅针对这个例子就有一个解决方案,但总的来说,这是一个非常艰巨的任务。只需阅读c#最近发布的规范中的7.5.3重载解析,就可以了解您面临的问题。你到底为什么要这么做?也许有一个更简单的解决方案,它并不意味着试图模仿,甚至部分模仿,语言中最难的特性之一。
.Where(m => m.GetParameters().Count() == 3)
var methods = typeof(Array).GetMethods();
var sortMethods = methods.Where(m => m.Name == "Sort");
var candidates = sortMethods.Where(m => m.GetParameters().Count() == 3);

var parameterTypes = new Type[] { typeof(byte).MakeArrayType(), typeof(Int32), typeof(Int32) };

foreach(var m in candidates)
{
    // find the best match
}