测试是否可以在“参数”列表上调用“通用方法”

时间:2018-05-14 09:00:31

标签: c# generics reflection system.reflection

让我们说我有一个通用的方法(从带有反射的父类型中检索):

void MyType::MyMethod<T>(T[], int, int)

我想知道我是否可以在某个类型列表上调用该方法:

byte[], int32, int32

显然答案是肯定的。

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

我可以很容易地获得所有方法:

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种方法:

example of 4 candidates

而且我不知道如何以编程方式找到最佳匹配。

0 个答案:

没有答案