簡體   English   中英

如何將枚舉列表顯示為字符串C#ASP.NET

[英]How to display enum list into a string C# ASP.NET

我有一個enum ,列表中有每個值的項目。 我希望能夠使用字符串在文本框中向最終用戶顯示enum list 這是我的枚舉:

enum CMD
{        
    COMMANDS, CMD = 0,
    ONE,      O =   1,
    TWO,      T =   2,
    THREE,    TH =  3,
    FOUR,     F =   4,        
    FIVE,     FI =  5,
    SIX,      S =   6,
    SEVEN,    SE =  7     
}

這是我嘗試使用以下代碼完成此任務的方法,用於枚舉value以顯示兩個有價值的列表項:

CMD cmd = (CMD)Enum.Parse(typeof(CMD), input);
if (cmd == CMD.COMMANDS)
{
    sb.Clear();
    sb.AppendLine("List the commands:");                    
    sb.AppendLine(((CMD)0).ToString() + "," + ((CMD)0).ToString("F").Split(',').Last());
    sb.AppendLine(((CMD)1).ToString() + "," + ((CMD)1).ToString("F").Split(',').Last());
    sb.AppendLine(((CMD)2).ToString() + "," + ((CMD)2).ToString("F").Split(',').Last());
    sb.AppendLine(((CMD)3).ToString() + "," + ((CMD)3).ToString("F").Split(',').Last());
    sb.AppendLine(((CMD)4).ToString() + "," + ((CMD)4).ToString("F").Split(',').Last());
    sb.AppendLine(((CMD)5).ToString() + "," + ((CMD)5).ToString("F").Split(',').Last());
    sb.AppendLine(((CMD)6).ToString() + "," + ((CMD)6).ToString("F").Split(',').Last());
    sb.AppendLine(((CMD)7).ToString() + "," + ((CMD)7).ToString("F").Split(',').Last());
    textbox.Text = sb.ToString();
}

我得到的輸出是:

List the commands:
CMD,COMMANDS
O, O
T, T
TH, TH
F, F
FI, FI
S, S
SEVEN, SE

我想輸出像這樣:

        COMMANDS, CMD
        ONE,   O
        TWO,   T
        THREE, TH
        FOUR,  F        
        FIVE,  FI
        SIX,   S
        SEVEN, SE   

如何完成我想要的輸出?

我的猜測是不,出於同樣的原因, Enum.GetName不是確定性的:

MSDN

如果多個枚舉成員具有相同的基礎值,則GetName方法保證它將返回這些枚舉成員之一的名稱。 但是,它不能保證將始終返回同一枚舉成員的名稱。 結果,當多個枚舉成員具有相同的值時,您的應用程序代碼應永遠不要依賴於返回特定成員名稱的方法。

枚舉意味着一個數值,而不是其他的方式來代替名字,所以當枚舉定義映射到相同的數值多個名字,有沒有指定哪個珍惜你想辦法。

一些選項:

  • 為您的枚舉值添加[Description]屬性,而不要使用重復的名稱
  • 將枚舉分為兩部分-一個代表“長”名稱,另一個代表“短”名稱(請注意,在定義輸入參數時必須選擇一個)
  • 使用除枚舉以外的其他內容。

如下所示:

        var dictonary = new Dictionary<CMD, List<string>>();
        var names = Enum.GetNames(typeof(CMD));
        foreach (var name in names)
        {
            var value = (CMD)Enum.Parse(typeof(CMD), name);
            if(!dictonary.ContainsKey(value))
                dictonary.Add(value, new List<string>() {name});
            else
                dictonary[value].Add(name);
        }

這樣,您就可以得到帶有值的枚舉描述的字典,並且可以根據需要實現結果。

Enum類支持使用GetNames方法獲取Enum名稱。 此代碼未考慮縮寫的CMD名稱,因為這是非常罕見的。

string[] enumNames = Enum.GetNames(typeof(CMD)); // Get all the names and store in array 
textbox.Text = String.Join(System.Environment.NewLine, enumNames); // Convert array to new line separated strings

暫無
暫無

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

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