【问题标题】:All Enum items to string (C#)所有枚举项到字符串(C#)
【发布时间】:2009-04-10 15:03:27
【问题描述】:

如何将所有元素从枚举转换为字符串?

假设我有:

public enum LogicOperands {
        None,
        Or,
        And,
        Custom
}

而我想要归档的内容是这样的:

string LogicOperandsStr = LogicOperands.ToString();
// expected result:  "None,Or,And,Custom"

【问题讨论】:

标签: c# .net enums


【解决方案1】:
string s = string.Join(",",Enum.GetNames(typeof(LogicOperands)));

【讨论】:

    【解决方案2】:

    你必须这样做:

    var sbItems = new StringBuilder()
    foreach (var item in Enum.GetNames(typeof(LogicOperands)))
    {
        if(sbItems.Length>0)
            sbItems.Append(',');
        sbItems.Append(item);
    }
    

    或者在 Linq 中:

    var list = Enum.GetNames(typeof(LogicOperands)).Aggregate((x,y) => x + "," + y);
    

    【讨论】:

    • 我在想类似的linq版本,你打败了我。 +1
    • 请不要这样滥用StringBuilder!
    • Randolpho stringbuilder 代码有什么问题?什么滥用?
    • 确实,我觉得还可以。使用 String.Join 更简洁,但我在这里看不到任何“滥用”。
    • 等等……你不是给那个乔恩写了正确的答案吗?这是一个微不足道的循环。 StringBuilder 太过分了。
    【解决方案3】:
    string LogicOperandsStr 
         = Enum.GetNames(typeof(LogicOoperands)).Aggregate((current, next)=> 
                                                           current + "," + next);
    

    【讨论】:

      【解决方案4】:

      虽然@Moose 的答案是最好的,但我建议您缓存该值,因为您可能会经常使用它,但它在执行过程中 100% 不太可能发生变化——除非您正在修改和重新编译枚举。 :)

      像这样:

      public static class LogicOperandsHelper
      {
        public static readonly string OperandList = 
          string.Join(",", Enum.GetNames(typeof(LogicOperands)));
      }
      

      【讨论】:

        【解决方案5】:
        foreach (string value in Enum.GetNames(typeof(LogicOoperands))
        {
            str = str + "," + value;
        }
        

        【讨论】:

        • 你必须修剪最后一个逗号
        【解决方案6】:

        将枚举转换为可以交互的东西的简单通用方法:

        public static Dictionary<int, string> ToList<T>() where T : struct
        {
           return ((IEnumerable<T>)Enum.GetValues(typeof(T))).ToDictionary(item => Convert.ToInt32(item), item => item.ToString());
        }
        

        然后:

        var enums = EnumHelper.ToList<MyEnum>();
        

        【讨论】:

          猜你喜欢
          • 2011-11-02
          • 2011-09-11
          • 1970-01-01
          • 2014-02-22
          • 2021-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-18
          相关资源
          最近更新 更多