让我们说我有一个通用的方法(从带有反射的父类型中检索):
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种方法:
而且我不知道如何以编程方式找到最佳匹配。