Проверьте, можно ли вызывать общий метод в списке параметров - PullRequest
0 голосов
/ 14 мая 2018

Допустим, у меня есть универсальный метод (полученный из родительского типа с отражением):

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

И я не знаю, какпрограммно найти лучшее соответствие.

...