Implementación de inferencia de tipo genérico en C # reflexivamente

Necesito hacer una inferencia de tipo genérico para una implementación de lenguaje de scripting y me pregunto si me estoy perdiendo algún enfoque directo. Por el momento, permítanme preguntar sobre la estructura de tipos e ignorar los límites. Para ilustrar, aquí hay un ejemplo profundamente anidado:

T foo<T>( List<List<List<T>>> ) {...}

Ahora quiero probar si puedo pasar una barra de argumentos de tipo:

List<List<List<string>>>

a ese método y luego use MakeGenericMethod () con el tipo de parámetro descubierto para reificarlo e invocarlo.

Por lo que puedo decir, incluso si logro construir un tipo genérico abierto equivalente al argumento foo (es decir,List<List<List<T>>>), no se probará con isAssignable (). No estoy seguro de si hay algún truco para verificar la asignabilidad de los tipos genéricos abiertos o si simplemente no es compatible. Supongo que si tengo que hacerlo puedo hacerlo directamente.

En la reificación: parece que voy a tener que rastrear recursivamente los tipos para encontrar el tipo de argumento que coincida con la ubicación del parámetro de tipo y luego hacer la sustitución ... esperaba que pudiera ser capaz de de alguna manera construya el método invocable a partir del tipo de argumento más directamente, pero no veo cómo hacerlo.

Cualquier consejo de alguien que ya haya pasado por esta locura sería apreciado :)

gracias Pat Niemeyer

Respuestas a la pregunta(1)

Su respuesta a la pregunta