【发布时间】:2012-02-07 13:37:38
【问题描述】:
Test if an object is an Enum 讨论使用is Enum 测试对象以查看它是否包含枚举值。
这是在规范中的任何地方指定的吗? is(版本 4.0 中的 7.10.10)上的条目列出了以下可能的右手值:
- 匿名函数
- 方法组
- 空
- 引用类型**这可能是一个枚举?
- 可空类型
- 不可为空的值类型**这可能是一个枚举?
假设枚举值与上面列表中的“引用类型”匹配 - 规范声明如下:
...如果 D [RHS 的动态类型)] 和 T [LHS] 是相同类型,如果 D 是引用类型并且存在从 D 到 T 的隐式引用转换,则结果为真,或者如果 D 是值类型并且存在从 D 到 T 的装箱转换。
在is Enum 的情况下,这些条件是否严格正确?没有编译器支持,例如 is class 或 is struct。
那么对is Enum的支持是按照规范,还是实现决策?
【问题讨论】:
-
是什么让你认为枚举 value 是 reference 类型?
-
@BoltClock:因为代码是这样说的!
typeof(Enum).IsValueType => false -
您是专门询问
Enum类型还是用户定义的枚举?似乎有点混乱(包括我;p) -
您如何拥有
Enum的实例?它或多或少是一个抽象类。
标签: c# enums language-implementation