簡體   English   中英

C# 中的長值枚舉

[英]Enum of long values in 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值分配給沒有強制轉換的整數類型。 這應該有效:

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,枚舉成員仍必須使用強制轉換顯式轉換為 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);
    }
}

Output

最大值 = 2147483648 最小值 = 255

AFAIK,你必須投。

MSDN 文章說:

“但是,需要顯式轉換才能從枚舉類型轉換為整數類型”(int 或 long)

你可以檢查一下:

枚舉類型(C# 參考)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM