Jeśli mam podpis metody, taki jak
public string myMethod<T>( ... )
Jak mogę, wewnątrz metody, uzyskać nazwę typu, który został podany jako argument typu? Chciałbym zrobić coś podobnego typeof(T).FullName, ale to faktycznie działa ...
Jeśli mam podpis metody, taki jak
public string myMethod<T>( ... )
Jak mogę, wewnątrz metody, uzyskać nazwę typu, który został podany jako argument typu? Chciałbym zrobić coś podobnego typeof(T).FullName, ale to faktycznie działa ...
Odpowiedzi:
Twój kod powinien działać. typeof(T).FullNamejest całkowicie poprawne. To jest w pełni kompilujący, działający program:
using System;
class Program
{
public static string MyMethod<T>()
{
return typeof(T).FullName;
}
static void Main(string[] args)
{
Console.WriteLine(MyMethod<int>());
Console.ReadKey();
}
}
Uruchomienie powyższych wydruków (zgodnie z oczekiwaniami):
System.Int32
<int?>" Jeśli tak, to działa, ale otrzymujesz System.Nullable<int>(w składni pełnej nazwy), czego można się spodziewać ...
nameof(T)i typeof(T).Namezrobię to samo. Okazuje się, że nameof(T)po prostu wraca T.
typeof(T).Namei typeof(T).FullNamepracują dla mnie. Otrzymuję typ przekazany jako argument.
Zakładając, że masz dostępną instancję T, nie różni się ona od innych typów.
var t = new T();
var name = t.GetType().FullName;
typeof(T).FullNamepowinno działać. Co się dzieje zamiast tego?