#c# #.net #reflection
#c# #.net #отражение
Вопрос:
Допустим, у меня есть следующая структура класса:
public class Outer<T>
{
public class Inner<U>
{
}
}
И некоторый код:
var testType = typeof(Outer<string>.Inner<int>);
Как я могу получить сконструированный универсальный тип typeof(Outer<string>)
или значение универсального typeof(string)
из testType
переменной?
Ответ №1:
Интересно — кажется, что универсальный аргумент внешнего типа проецируется на внутренний тип:
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]
Комментарии:
1. Вы имеете в виду
testType.GetGenericArguments()[0]
?testType.DeclaringType.GetGenericArguments()[0]
дает мнеtypeof(T)
. В любом случае, хороший улов 🙂2. @Shane. Хороший улов. Исправлено.