查找类型参数的类型
请考虑以下问题:
private T getValue<T>(String attr)
{ ... }
如何检查 Type 是什么?
我在想:
if("" is T) // String
if(1 is T) // Int32
有没有更好的办法呢?
Consider the following:
private T getValue<T>(String attr)
{ ... }
How do I check to see what Type is?
I was thinking of:
if("" is T) // String
if(1 is T) // Int32
Is there a better way?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
有函数
typeof(T)
吗?There's the function
typeof(T)
?您可以使用函数
typeof(T)
吗?因此,要检查字符串,请执行
if(typeof(T) == typeof(string))
// do someYou can use the function
typeof(T)
?So to check for the string, do
if(typeof(T) == typeof(string))
// do something如果您需要获取泛型类型参数的类型,那么这几乎肯定是函数设计中的缺陷;这与“通用”相反。因此,请改用重载。
除此之外,Unsliced已经给出了判断
T
类型的正确答案。This is almost certainly a flaw in the design of your function if you need to get the type of the generic type parameter; This is opposite of “generic”. Hence, use overloading instead.
Other than that, Unsliced has already given the correct answer of determining the type of
T
.实际上有 2 个方法可以做到这一点,如果预期的类派生自同一个类或接口或抽象类,您可以在通用签名
T GetValue() 中轻松完成其中 T :类,这将强制整个 T 类型成为引用类型。
或者
T GetValue() 其中 T : IDisposable ,这将强制整个 T 类型实现 IDisposable。
对于您的情况, typeof(T) 将解决您的问题,但在这种情况下,请使该方法不通用。
There are actually 2 methods doing that, if the expected classes derive from the same class or interface or abstract class you can do easly in the Generic Signature
T GetValue() where T : class, this will force whole T Types To Be Reference Types.
Or
T GetValue() where T : IDisposable , this will force whole T Types to implement IDisposable.
for your case typeof(T) will solve your problems, but in this case, make the method not generic.