![](/img/trans.png)
[英]How to display List<string> of urls as hyperlinks on an ASP.Net page (C#)
[英]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.