c#长值的枚举

Mat*_*ieu 18 c# enums

我想知道为什么这个宣言:

public enum ECountry : long
{
    None,
    Canada,
    UnitedStates
}
Run Code Online (Sandbox Code Playgroud)

需要演员的任何价值?

long ID = ECountry.Canada;
// Error Cannot implicitly convert type 'ECountry' to 'long'.
// An explicit conversion exists (are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)

除了演员之外,还有什么方法可以直接从枚举中获取长值?

这不会起作用,例如:

public enum ECountry : long
{
    None = 0L,
    Canada = 1L,
    UnitedStates=2L
}
Run Code Online (Sandbox Code Playgroud)

dle*_*lev 31

问题在于底层类型仍然存在int.它是long,您可以long为成员分配值.但是,如果没有强制转换,您永远不能enum为一个整数类型赋值.这应该工作:

public enum ECountry : long
{
    None,
    Canada,
    UnitedStates = (long)int.MaxValue + 1;
}

// val will be equal to the *long* value int.MaxValue + 1
long val = (long)ECountry.UnitedStates;
Run Code Online (Sandbox Code Playgroud)


小智 9

默认的底层类型enumint.一个enum可以是除任何整数类型char.

如果你想要它long,你可以做这样的事情:

// Using long enumerators
using System;
public class EnumTest 
{
    enum Range :long {Max = 2147483648L, Min = 255L};
    static void Main() 
    {
        long x = (long)Range.Max;
        long y = (long)Range.Min;
        Console.WriteLine("Max = {0}", x);
        Console.WriteLine("Min = {0}", y);
    }
}
Run Code Online (Sandbox Code Playgroud)

演员阵容在这里很重要.和作为@dlev说,使用的目的,long在一个enum是支持大量的标志(超过32,因为2 ^ 32是4294967296和一个long可容纳多于2 ^ 32).


Bos*_*sak 6

必须使用枚举来获取它的值,否则它将保持enum类型