Ответ 1
string s = string.Join(",",Enum.GetNames(typeof(LogicOperands)));
Как преобразовать все элементы из перечисления в строку?
Предположим, что у меня:
public enum LogicOperands {
None,
Or,
And,
Custom
}
И то, что я хочу архивировать, это что-то вроде:
string LogicOperandsStr = LogicOperands.ToString();
// expected result: "None,Or,And,Custom"
string s = string.Join(",",Enum.GetNames(typeof(LogicOperands)));
Вам нужно сделать что-то вроде этого:
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);
string LogicOperandsStr
= Enum.GetNames(typeof(LogicOoperands)).Aggregate((current, next)=>
current + "," + next);
foreach (string value in Enum.GetNames(typeof(LogicOoperands))
{
str = str + "," + value;
}
Несмотря на то, что ответ @Moose лучший, я предлагаю вам кешировать значение, поскольку вы можете часто его использовать, но на 100% вряд ли изменитесь во время выполнения - если вы не изменяете и не перекомпилируете перечисление.:)
Так же:
public static class LogicOperandsHelper
{
public static readonly string OperandList =
string.Join(",", Enum.GetNames(typeof(LogicOperands)));
}
Простой и общий способ преобразования перечисления в нечто, с которым вы можете взаимодействовать:
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>();