Это зависит от того, хотите ли вы отобразить тип T
или тип объекта, к которому относится параметр.
Рассмотрим:
public static void ShowTypes<T>(T item)
{
Console.WriteLine("T = " + typeof(T));
Console.WriteLine("item.GetType() = " + item.GetType());
}
Теперь представьте:
ShowTypes<object>("foo");
Это полностью допустимо, но тип T
- это System.Object, тогда как тип объекта - System.String.
Также следует учитывать, что вы хотите, чтобы произошлос:
ShowTypes<string>(null); // Will print System.String then explode
и
int? x = 10;
ShowTypes<int?>(x); // Will print System.Nullable<System.Int32>
// and then System.Int32