c#长值的枚举
我想知道为什么这个宣言:
public enum ECountry : long { None, Canada, UnitedStates }
需要为其任何值进行演员表?
long ID = ECountry.Canada; // Error Cannot implicitly convert type 'ECountry' to 'long'. // An explicit conversion exists (are you missing a cast?)
除了演员之外,还有什么方法可以直接从枚举中获取长值吗?
这不会起作用,例如:
public enum ECountry : long { None = 0L, Canada = 1L, UnitedStates=2L }
问题不在于底层类型仍然是int
。 它很long
,您可以为成员分配long
值。 但是,您永远不能只在没有 enum
转换的情况下将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;
enum
的默认底层类型是int
。 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); } }
演员阵容在这里很重要。 正如@dlev所说,在enum
中使用long
的目的是支持大量的标志(超过32,因为2 ^ 32是4294967296,而long
可以容纳超过2 ^ 32)。
你必须使用枚举来获取它的值,否则它将保持enum
类型
来自msdn
在此示例中,base-type选项用于声明其成员的类型为long的枚举。 请注意,即使枚举的基础类型很长,枚举成员仍必须使用强制转换显式转换为long类型。
// keyword_enum2.cs // 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); } }
产量
最大值= 2147483648最小值= 255
AFAIK你得演员。
MSDN文章说:“但是,需要显式转换才能从枚举类型转换为整数类型”(int或long)
你可以看一下: https : //docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/enum
上述就是C#学习教程:c#长值的枚举分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1033925.html