【发布时间】:2020-12-06 22:21:17
【问题描述】:
如果我有enum...
public enum Frequency {
OneOff = 0,
Monthly = 1,
Quarterly = 2,
Annually = 3
}
...那么我可以做这样的事情...
int n = (int)Frequency.Annually;
鉴于从 C# 7.3 开始,我们能够使用 Enum 作为通用约束,我希望能够做到这一点......
public void Stuff<T>(T val) where T : Enum {
int v = (int)val;
}
...但是编译器抱怨说它无法将类型 T 转换为 int。
谁能给我解释一下?泛型约束告诉编译器T 是enum,并且(除非您特别做不同)enum 值可以转换为int。
【问题讨论】:
-
我不明白为什么这个问题被关闭了。上面的问题是要求理解为什么不能做某事。在这种情况下 - enum 本身可以继承自 'short'、'byte'、'int' 等。因此编译器无法判断 Enum 的父类型是什么。结束此问题的参考答案是一种破解/解决方法 - 不应在复杂的编码环境中完成。