Получение универсального типа из DeclaringType вложенного типа в C # с отражением - PullRequest
1 голос
/ 07 марта 2019

Скажем, у меня следующая структура класса:

public class Outer<T>
{
    public class Inner<U>
    {
    }
}

И некоторый код:

var testType = typeof(Outer<string>.Inner<int>);

Как я могу получить составной универсальный тип typeof(Outer<string>) или значение универсального typeof(string) из переменной testType?

1 Ответ

4 голосов
/ 07 марта 2019

Интересно - похоже, что универсальный аргумент внешнего типа проецируется на внутренний тип:

var testType = typeof(Outer<string>.Inner<int>);              
var outerType = testType.DeclaringType;                       
var outerTypeGenericParam = outerType.GetGenericArguments();
var testTypeGenericParam = testType.GetGenericArguments();
Console.WriteLine(outerType);                                 // Test+Outer`1[T] 
Console.WriteLine(outerTypeGenericParam[0]);                  // T
Console.WriteLine(testTypeGenericParam[0]);                   // System.String
Console.WriteLine(testTypeGenericParam[1]);                   // System.Int32

так что однострочник в вашем случае будет:

testType.GetGenericArguments()[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...