如果我有一个enum
...
public enum Frequency {
OneOff = 0,
Monthly = 1,
Quarterly = 2,
Annually = 3
}
Run Code Online (Sandbox Code Playgroud)
...那么我可以做这样的事情...
int n = (int)Frequency.Annually;
Run Code Online (Sandbox Code Playgroud)
鉴于自 C# 7.3 以来,我们能够用作Enum
通用约束,我希望能够做到这一点......
public void Stuff<T>(T val) where T : Enum {
int v = (int)val;
}
Run Code Online (Sandbox Code Playgroud)
...但是编译器抱怨说它无法将类型转换T
为int
.
有人能向我解释一下吗?通用约束告诉编译器这T
是一个enum
,并且(除非您专门以不同的方式进行操作)enum
可以将值转换为int
。
enum 可以是 long 或其他东西
public static void Stuff<T>(T val) where T : System.Enum, IConvertible
{
int v = val.ToInt32(null);
}
Run Code Online (Sandbox Code Playgroud)
这有效
如果你看一下 Enum,你会发现它没有被声明为 int。实际的基类和实现是:
public abstract class Enum : ValueType, IComparable, IFormattable, IConvertible
Run Code Online (Sandbox Code Playgroud)
BTW:更喜欢 long 而不是 int,因为 long 被用作枚举中的标志以允许 64 个标志
归档时间: |
|
查看次数: |
948 次 |
最近记录: |