Мне нужно сделать какой-то общий вывод типа для реализации языка сценариев, и мне интересно, если я упускаю какой-то простой подход. На данный момент позвольте мне спросить о структуре типов и игнорировать границы. Для иллюстрации приведем глубоко вложенный пример:
T foo<T>( List<List<List<T>>> ) {...}
Теперь я хочу проверить, могу ли я передать строку аргументов типа:
List<List<List<string>>>
к этому методу, а затем используйте MakeGenericMethod () с обнаруженным типом параметра, чтобы преобразовать и вызвать его.
Из того, что я могу сказать, даже если мне удастся создать открытый универсальный тип, эквивалентный аргументу foo (т.е. List<List<List<T>>>
), он не будет тестироваться с помощью isAssignable (). Я не уверен, есть ли какая-то хитрость для проверки присваиваемости открытых универсальных типов или просто не поддерживается. Я думаю, что если я должен, я могу сделать это напрямую.
Об ограничении - похоже, мне придется рекурсивно пролистывать типы, чтобы найти тип аргумента, который соответствует расположению параметра типа, а затем выполнить подстановку ... Я надеялся, что смогу быть в состоянии каким-то образом создать вызываемый метод из типа аргумента более напрямую, но я не вижу, как это сделать.
Любой совет от кого-то, кто уже прошел через это безумие, был бы оценен:)
спасибо,
Пэт Нимейер