我想知道为什么这个宣言:
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
默认的底层类型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);
}
}
Run Code Online (Sandbox Code Playgroud)
演员阵容在这里很重要.和作为@dlev说,使用的目的,long在一个enum是支持大量的标志(超过32,因为2 ^ 32是4294967296和一个long可容纳多于2 ^ 32).
| 归档时间: |
|
| 查看次数: |
22897 次 |
| 最近记录: |