簡體   English   中英

如何定義包含整數作為值的C#枚舉?

[英]How do I define a C# enum that includes integers as values?

我正在設計一個需要“位置”字段的應用程序。 該位置的值是“3241”,“4112”,“ND”和“TRAVEL”,我正在嘗試設置包含這些值的enum

我開始了

    enum projectLocation {3241,4112,ND,TRAVEL};

但是值3241和4112表示語法錯誤 - 期望的identifier expected - 對於enum的第一個值。 如果我正確理解enum ,那是因為上面的語句正在查找enum的整數indeces為32414112 這是正確的假設嗎?

我嘗試用以下內容覆蓋它

    enum projectLocation {3241=0,4112,ND,TRAVEL};

    enum projectLocation {3241=0,4112=1,ND=2,TRAVEL=3};

但我仍然在3241值上得到相同的語法錯誤。 有趣的是,在這兩個語句中,4112上沒有語法錯誤,但我can't find the namespace or name ND...TRAVEL

有意義的是, enum不允許混合使用字符串和整數,並且我還有兩個其他enum工作正常並且只是字符串值的列表,證實了這個理論。 有沒有辦法強制enum接受數值作為字符串? 我無法在MSDNs C#文檔中找到任何引用。

你不能像你想要的那樣完成它。 這是另一種選擇:

enum projectLocation {
    L3241=3241,
    L4112=4112,
    ND=2,
    TRAVEL=3
}

用字母開頭使它們成為有效的枚舉標識符,並將它們的值設置為等於它們的數量,這樣就可以執行(projectLocation)3241並獲得預期的L3241值。

如果序列化時需要值為32414112 ,請為序列化方法包含適當的屬性,例如使用Json.NET:

enum projectLocation {
    [JsonProperty("3241")]
    L3241=3241,
    [JsonProperty("4112")]
    L4112=4112,
    ND=2,
    TRAVEL=3
}

枚舉被稱為命名常量,所以基本上你給一些常量命名。 名稱是c#中的“標識符”,其中標識符可以包含數字,但第一個字符不能是數字。

您可以在此之前添加_以修復此錯誤。

enum projectLocation 
{
    _3241=0,
    _4112=1,
    ND=2,
    TRAVEL=3
}

另請注意字段,屬性方法或上述此標識符規則下的任何內容。

你需要做這樣的事情:

enum projectLocation { v3241, v4112, ND, TRAVEL };

要么:

enum projectLocation { _3241, _4112, ND, TRAVEL };

我傾向於使用下划線。

C#不允許成員名的第一個字符以數字開頭。 考慮使用@字符作為前綴,或者傳達對代碼的讀者有用的含義的其他字符,因為對於不熟悉3241在您的上下文中的重要性的讀者來說,孤立的數字可能不是非常直觀。

暫無
暫無

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

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