枚举到 int 拆箱?

风疹
enum Season { spring, summer, fall, winter }
int a = (int)Season.spring;

这是拆箱还是普通铸造?如果这是拆箱,您能解释一下原因吗?我认为这只是一个正常的转换,因为 'enum' 和 'int' 都是值类型数据。

查理脸

ECMA-334 11.3.3 中所述,C# 定义了与enum类型及其基础类型之间的转换:

但是,这并没有说明它是否是拆箱转换。但是,这可以从枚举和整数都是值类型的事实中推断出来,因此不涉及拆箱。

定义 CLR 的ECMA-335更清楚地表明 anenum不仅可以转换为整数,它实际上整数,根本没有进行任何转换:

14.3 枚举

出于绑定目的(例如,为了从用于调用它的方法引用中定位方法定义),枚举应与其基础类型不同。对于所有其他目的,包括代码的验证和执行,未装箱的枚举与其底层类型自由地相互转换。枚举可以装箱(第 13 节)到相应的装箱实例类型,但这种类型与底层类型的装箱类型不同,因此装箱不会丢失枚举的原始类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章