我在c#
中遇到枚举问题enum myenum {one, two, three} ;
Public myenum type;
type=2;
为什么它不起作用?如何以这种方式将枚举转换为整数?
答案 0 :(得分:2)
答案 1 :(得分:0)
int
和enum
之间没有隐式转换。但是有明确的转换
type = 2; // Error
type = (myenum)2; // Ok
此规则的一个例外是文字0.字面值0隐式转换为任何枚举类型
type = 0; // Ok
答案 2 :(得分:0)
您可以在两者之间进行显式转换,同时确保使用特定值声明枚举,因为自动索引从零开始。
enum myenum {one = 1, two = 2, three = 3} ;
private void GoEnum()
{
myenum x = (myenum)1;
Console.WriteLine(x);
Console.WriteLine((int)x);
}
答案 3 :(得分:0)
枚举的整个目的是为了避免“魔术数字”。他们的目的是为了避免代码,就像读者需要“知道”2代表myenum.two
一样。在幕后它只是一个整数(或其他整数类型),但语言可以隐藏这一事实。
它允许您将整数转换为它的枚举表示,反之亦然,因为有时候这是必要的,但是因为应该尽可能避免语言强制您显式地转换整数({{ 1}}),而不是为你隐式转换它,以便你的意图在代码中变得非常明确。
答案 4 :(得分:0)
除非指定,否则枚举不能转换为没有强制转换的整数(这是不安全的)。您必须为枚举中的每个选项指定整数值。
示例:
enum MyEnum {
One,
Two,
Three
};
会变成:
enum MyEnum {
One = 1,
Two = 2,
Three = 3
};
枚举占用整数(4个字节)的大小。这允许转换为int,但就像我说的那样,为枚举选项赋值是更好的做法。如果您想更改MyEnum扩展的值,请执行以下操作:
enum MyEnum : long /* or short, ushort, ulong, uint, sbyte, byte etc */ {
One = 1L,
Two = 2L,
Three = 3L
};
请注意,唯一可以使用的类型是:
byte, sbyte, short, ushort, int, uint, long or ulong
这不包括System.Integer或System.Byte。