Если у меня есть подпись метода, например
public string myMethod<T>( ... )
Как я могу внутри метода получить имя типа, которое было задано как аргумент типа? Я бы хотел сделать что-то подобное typeof(T).FullName
, но это действительно работает ...
typeof(T).FullName
должно работать. Что происходит вместо этого?Ответы:
Ваш код должен работать.
typeof(T).FullName
совершенно верно. Это полностью компилируемая, работающая программа:using System; class Program { public static string MyMethod<T>() { return typeof(T).FullName; } static void Main(string[] args) { Console.WriteLine(MyMethod<int>()); Console.ReadKey(); } }
Выполнение вышеприведенных отпечатков (как и ожидалось):
источник
<int?>
" Если так, то это работает, но вы получаетеSystem.Nullable<int>
(в синтаксисе полного имени), что и следовало ожидать ...nameof(T)
иtypeof(T).Name
будет делать то же самое. Оказывается,nameof(T)
просто возвращаетсяT
.typeof(T).Name
иtypeof(T).FullName
работают на меня. Я получаю тип, переданный в качестве аргумента.источник
Предполагая, что у вас есть доступный экземпляр T, он ничем не отличается от любого другого типа.
var t = new T(); var name = t.GetType().FullName;
источник