![](/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.