查找类型参数的类型

发布于 2024-08-23 12:08:47 字数 213 浏览 5 评论 0原文

请考虑以下问题:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

空心↖ 2024-08-30 12:08:47

有函数typeof(T)吗?

There's the function typeof(T)?

潜移默化 2024-08-30 12:08:47

您可以使用函数typeof(T)吗?

因此,要检查字符串,请执行

if(typeof(T) == typeof(string)) // do some

You can use the function typeof(T)?

So to check for the string, do

if(typeof(T) == typeof(string)) // do something

极度宠爱 2024-08-30 12:08:47

如果您需要获取泛型类型参数的类型,那么这几乎肯定是函数设计中的缺陷;这与“通用”相反。因此,请改用重载。

除此之外,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.

蝶…霜飞 2024-08-30 12:08:47

实际上有 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文