考虑以下几点:查找类型参数的类型
private T getValue<T>(String attr)
{ ... }
我如何检查,看看是什么类型?
我在想:
if("" is T) // String
if(1 is T) // Int32
有没有更好的办法?
考虑以下几点:查找类型参数的类型
private T getValue<T>(String attr)
{ ... }
我如何检查,看看是什么类型?
我在想:
if("" is T) // String
if(1 is T) // Int32
有没有更好的办法?
有功能typeof(T)
?
所以如果(typeof(T)== Type.GetType(“String”))??? – 2010-03-01 12:55:40
if(typeof(T)== typeof(String))应该更快 – helium 2010-03-01 12:58:43
您可以使用此功能typeof(T)
?
所以来检查字符串,做
if(typeof(T) == typeof(string))
//做点什么
这几乎可以肯定是在你的功能的设计有一个缺点,如果你需要获得泛型类型参数的类型;这是与“generic”的相对。因此,请使用重载。
除此之外,Unsliced已经给出了确定T
类型的正确答案。
我需要它用于调试目的。 – 2010-03-01 13:08:36
您可以使用它来确定类型参数是否为像typeof(T).IsValueType这样的值类型。 – LoBo 2013-09-10 13:08:34
@LoBo当然,但这不是* OP所要求的,对于大多数(但不是全部)目的,您可以在此处使用约束而不是在运行时检查。 – 2013-09-10 15:25:36
实际上有2种方法做,如果预期的类都是从同一个类或接口或抽象类,你可以在一般的签名
牛逼的GetValue(),其中T伊斯利做得出:类,这将迫使整个T类型成为引用类型。 或 T GetValue()其中T:IDisposable,这将强制整个T类型实现IDisposable。
您的案例typeof(T)将解决您的问题,但在这种情况下,使该方法不通用。
这个问题比'重复'更有用,因为它只是询问这一件事,而另一个问题有额外的包袱影响答案的内容。 – DCShannon 2015-03-24 19:55:01