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.

Tags:

C#

Enums