其实你的'已经定义了一个结构......在幕后枚举只是一个结构(但是从System.Enum派生)和枚举值被定义为常量(可以用ILDASM来验证)。
你枚举定义转换为以下伪C#代码:
public struct Color : System.Enum
{
public const int Red = 1;
public const int Blue = 1;
public const int Green = 1;
}
上面的代码将不会在C#编译,因为编译器不允许界定具有明确的基类的一个结构,但是这就是它发出一个枚举定义。
由于包含多个具有相同值的常量的类型没有问题,所以枚举定义没有问题。
但由于enum没有唯一值,所以在转换为此枚举时可能会遇到问题。 例如,以下两行代码将返回枚举值Red,因为第一个值是任意选择的。
Color color1 = (Color)1;
Color color2 = (Color)Enum.Parse(typeof(Color), "1");
严格来说,枚举值不是红色,它是1,但是当你打印出来的值,你会看到红色。
此外,下面的布尔是真实的,看起来有点怪......
// true (Red is Green??)
bool b = Color.Red == Color.Green;
在底线,这是完全合法的,但它给你当它是有道理的使用它...
这里是直接链接到我的.NET教程的发动机罩下的讨论枚举部分:http://motti.me/c1E
这总是最好用相反回答过的问题:为什么会*不*允许这样做?当你说包括First和Last的enum成员时,它非常方便。 –
如何使用“struct for this”? – wiero
我可以使用一个结构来获得枚举“外观”,我不必投。就像“公共静态诠释红色{得到{返回1;}}” – Rikon