枚举为整数转换

时间:2013-12-06 18:09:49

标签: c# enums

我在c#

中遇到枚举问题
enum myenum {one,  two,  three} ; 
Public myenum type; 
type=2;

为什么它不起作用?如何以这种方式将枚举转换为整数?

5 个答案:

答案 0 :(得分:2)

您必须显式地将整数转换为myenum

type = (myenum) 2;

有关更多说明,请参阅此主题:Cast int to enum in C#

答案 1 :(得分:0)

intenum之间没有隐式转换。但是有明确的转换

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。