C# 枚举到整数强制转换

C# 枚举到整数强制转换,c#,enums,C#,Enums,我对c中的枚举有问题# 为什么它不起作用?如何以这种方式将枚举强制转换为整数 您必须显式地将整数强制转换为myenum: type = (myenum) 2; 查看此线程以了解更多解释:在int和enum之间没有隐式转换。然而,有一个明确的转换 type = 2; // Error type = (myenum)2; // Ok 此规则的一个例外是文本0。文本0隐式转换为任何枚举类型 type = 0; // Ok 您可以显式地在两者之间转换,还可以确保在自动索引从零开始

我对c中的枚举有问题#


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

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

type = (myenum) 2;

查看此线程以了解更多解释:

int
enum
之间没有隐式转换。然而,有一个明确的转换

type = 2;         // Error
type = (myenum)2; // Ok
此规则的一个例外是文本0。文本0隐式转换为任何枚举类型

type = 0; // Ok 

您可以显式地在两者之间转换,还可以确保在自动索引从零开始时使用特定值声明枚举

    enum myenum {one = 1,  two = 2,  three = 3} ; 


    private void GoEnum()
    {
        myenum x = (myenum)1;
        Console.WriteLine(x);
        Console.WriteLine((int)x);

    }
枚举的全部目的是避免“幻数”。它们的目的是避免像读者需要“知道”2代表myenum.two那样的代码。在幕后,它只是一个整数(或其他一些整数类型),但该语言的工作原理是向您隐藏这一事实


它确实允许您将整数转换为它的枚举表示形式,反之亦然,因为有时这是非常必要的,但应尽可能避免,因为该语言强制您显式转换整数(
type=(myenum)2;
),而不是隐式转换它,因此,您的意图在代码中非常清楚。

除非指定,否则在没有强制转换的情况下,无法将枚举转换为整数(这是不安全的)。必须为枚举中的每个选项指定整数值

例如:

enum MyEnum {
    One,
    Two,
    Three
};
将成为:

enum MyEnum {
    One = 1,
    Two = 2,
    Three = 3
};
枚举占用整数大小(4字节)。这允许强制转换为int,但正如我所说的,最好将值指定给enum选项。如果要更改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的内容。

为什么不直接强制转换,而不是期望隐式转换?请参阅此线程:但是。。。此显式规则不适用于
0
(零),零可以隐式转换为任何枚举类型。@SriramSakthivel是的,需要做出例外,因为需要将所有值类型初始化为按位零,因此零必须是任何枚举的有效值。如果他们能够避免,他们可能会。一般来说,最好尽可能避免依赖该异常。
    byte, sbyte, short, ushort, int, uint, long or ulong