Enum of long values in C#
The issue is not that the underlying type is still int
. It's long
, and you can assign long
values to the members. However, you can never just assign an enum
value to an integral type without a cast. This should work:
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;
The default underlying type of enum
is int
. An enum
can be any integral type except char
.
If you want it to be long
, you can do something like this:
// 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);
}
}
The cast is what is important here. And as @dlev says, the purpose of using long
in an enum
is to support a large number of flags (more than 32 since 2^32 is 4294967296 and a long
can hold more than 2^32).
You must cast an enum to get a value from it or it will remain an enum
type.