繁体   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