Все элементы Enum в строку (C #)

Как преобразовать все элементы из перечисления в строку?

Предположим, у меня есть:

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

И то, что я хочу заархивировать, выглядит примерно так:

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

person Maciej    schedule 10.04.2009    source источник
comment
Проверка этого ответа также может быть полезна: stackoverflow.com/a/12022617/1830909   -  person QMaster    schedule 22.11.2017


Ответы (4)


Вам нужно сделать что-то вроде этого:

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);
person Keltex    schedule 10.04.2009
comment
Я думал об аналогичной версии linq, ты меня обыграл. +1 - person Vivek; 10.04.2009
comment
Пожалуйста, не злоупотребляйте таким образом StringBuilder! - person Randolpho; 10.04.2009
comment
Randolpho, что не так с кодом конструктора строк? Какая ругань? - person Petar Petrov; 10.04.2009
comment
В самом деле, мне это кажется нормальным. Использование String.Join более аккуратно, но я не вижу здесь злоупотреблений. - person Jon Skeet; 10.04.2009
comment
Если у вас нет нескольких десятков элементов в перечислении, вам лучше использовать конкатенацию строк. - person Randolpho; 10.04.2009
comment
Дополнительная литература: stackoverflow.com/questions/529999/ когда-использовать-построитель-строк / - person Randolpho; 10.04.2009
comment
Подожди ... разве ты не написал правильный ответ этому Джону? Это тривиальный цикл. StringBuilder - это перебор. - person Randolpho; 10.04.2009

Хотя ответ @Moose является лучшим, я предлагаю вам кэшировать значение, поскольку вы можете использовать его часто, но на 100% маловероятно, что оно изменится во время выполнения - если вы не изменяете и не перекомпилируете перечисление. :)

Вот так:

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

Простой и универсальный способ преобразовать перечисление во что-то, с чем вы можете взаимодействовать:

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>();
person Gabriel    schedule 12.09.2014

person    schedule
comment
Вы должны обрезать последнюю запятую - person Yargicx; 08.02.2018