Допустим, у меня есть универсальный метод (полученный из родительского типа с отражением):
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 метода:
И я не знаю, какпрограммно найти лучшее соответствие.