C#如何限定泛型类型T一定是一个枚举类型?

发布于 2021-11-07 22:17:52 字数 564 浏览 826 评论 5

写成这样总是要报编译错误where T : Enum

我不知道如何限定一个类型必须是枚举类型了。请各位指点。

where T : ValueType  这样也还是不行

但是Enum的基类就是ValueType  请各位指点

我就是要实现一个自字符串转换为任意枚举值的一个自定义方法   我本身是这样写的:

public static T ConvertFromString<T>(string strValue) where T : Enum
        {
            T t = default(T);
            return Enum.TryParse(strValue, true, out t) ? t : default(T);
        }

因为我希望能在这里对其输入的值进行限制,如果输入的不是枚举类型那么编译的时候就会报错而不是运行的时候才报错   我要的效果就是这样  但是不知道该如何实现了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(5

虐人心 2021-11-08 17:04:02

但是这个是struct 编译 的时候如果任意传入另一个struct的也是可以的了 但是我需要的是限定是Enum而不是其他

乞讨 2021-11-08 17:01:39

这同样限制了必须实现IConvertible接口,所以基本就是Enum了。或者是用户同样实现了这个接口的Enum Clone

緦唸λ蓇 2021-11-08 14:01:20

总的来说 还是没能达到限定Enum的子类的效果啊

陌若浮生 2021-11-08 09:04:04

你可以参考这个答案:http://stackoverflow.com/questions/79126/create-generic-method-constraining-t-to-an-enum 下面有个用MSIL克服C#局限的办法,但我觉得没必要,而且MS这么设计自然有它的原因

小瓶盖 2021-11-08 08:49:51

where T
:

struct
,

IConvertible

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