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).FullName
jest 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).Name
zrobię to samo. Okazuje się, że nameof(T)
po prostu wraca T
.
typeof(T).Name
i typeof(T).FullName
pracują 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).FullName
powinno działać. Co się dzieje zamiast tego?