Csharp/C#教程:枚举Int32类型的成员分享


枚举Int32类型的成员

可能重复:
C#int,Int32和enum

这可能是一个相当基本/简单的问题,我正在以下列方式创建枚举。

案例1编译完美。 但案例2引发了错误。 我理解int和Int32在C#中的含义相同。

情况1

[Flags] public enum MyEnum : int { Red = 0x1, Green = 0x2, Blue = 0x4 } 

案例2

  [Flags] public enum MyEnum : Int32 { Red = 0x1, Green = 0x2, Blue = 0x4 } 

这里的区别是什么,以及当enum的成员被指定为Int32类型时C#不编译代码的原因是什么?

从这里的Microsoft错误报告 :

症状
如果使用System.Int16 / Int32 / Int64而不是Short / Int / Long来声明枚举,则会出现编译错误。

根本原因
这是设计的。 在Enum声明中确实需要使用值类型别名。

这是“按设计”。

  1. 语法是正确的。 C#规范明确声明枚举的底层类型必须是byte,sbyte,short,ushort,int,uint,long或ulong。

  2. 虽然“Short”和“System.Int16”的基础类型是同一个,但它们并不像你想象的那样相同。 System.Int16是一个类型,Short是一个类型关键字。

  3. ValueType已密封。 您不能从任何派生自System.ValueType的类inheritance。

  4. 但是,它允许您使用关键字来控制。 目的是在声明其他类型时阻止使用从System.ValueType派生的任何类型的名称。 最初的目的是提供一种严格控制的机制,允许您声明从System.ValueTypeinheritance的类型。 但是,MSDN说“C#类型的关键字和它们的别名是可以互换的”,这通常让客户感到困惑/莫名其妙。 他们认为这是编译器或语法错误。

业务影响/客户体验
由于“Short”和“System.Int16”是相同的基础类型并且可以互换,因此许多客户感到困惑/莫名其妙,因为它在Enum声明中无法互换。 他们认为这是编译器或语法错误。 客户的声音:这听起来像一个小的编译器错误(小,因为它易于解决)。 以下是MSDN所说的“C#类型关键字及其别名是可以互换的。” 在我看来,这是一个真实但很小的编译器(或者语法)错误。 编译器允许你在这里使用“short”而不是“System.Int16”的事实是编译器的一个怪癖(也许不是bug,而是一个怪癖)。

上述就是C#学习教程:枚举Int32类型的成员分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

www.ctvol.com true Article Csharp/C#教程:枚举Int32类型的成员分享

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/950665.html

(0)
上一篇 2021年11月17日 下午6:50
下一篇 2021年11月17日 下午6:51

精彩推荐