2010-03-01 115 views
7

考虑以下几点:查找类型参数的类型

private T getValue<T>(String attr) 
{ ... } 

我如何检查,看看是什么类型?

我在想:

if("" is T) // String 
if(1 is T) // Int32 

有没有更好的办法?

+0

这个问题比'重复'更有用,因为它只是询问这一件事,而另一个问题有额外的包袱影响答案的内容。 – DCShannon 2015-03-24 19:55:01

回答

16

有功能typeof(T)

+0

所以如果(typeof(T)== Type.GetType(“String”))??? – 2010-03-01 12:55:40

+9

if(typeof(T)== typeof(String))应该更快 – helium 2010-03-01 12:58:43

5

您可以使用此功能typeof(T)

所以来检查字符串,做

if(typeof(T) == typeof(string)) //做点什么

5

这几乎可以肯定是在你的功能的设计有一个缺点,如果你需要获得泛型类型参数的类型;这是与“generic”的相对。因此,请使用重载。

除此之外,Unsliced已经给出了确定T类型的正确答案。

+0

我需要它用于调试目的。 – 2010-03-01 13:08:36

+0

您可以使用它来确定类型参数是否为像typeof(T).IsValueType这样的值类型。 – LoBo 2013-09-10 13:08:34

+0

@LoBo当然,但这不是* OP所要求的,对于大多数(但不是全部)目的,您可以在此处使用约束而不是在运行时检查。 – 2013-09-10 15:25:36

2

实际上有2种方法做,如果预期的类都是从同一个类或接口或抽象类,你可以在一般的签名

牛逼的GetValue(),其中T伊斯利做得出:类,这将迫使整个T类型成为引用类型。 或 T GetValue()其中T:IDisposable,这将强制整个T类型实现IDisposable。

您的案例typeof(T)将解决您的问题,但在这种情况下,使该方法不通用。