将枚举存储为逗号分隔列表

时间:2013-07-05 19:47:24

标签: asp.net-mvc c#-4.0

我正在尝试将enum保存为数据库中以逗号分隔的列表。

我知道我可以做这样的事情来实际存储以逗号分隔的列表:

part.MyProperty = new[] {"foo", "bar"};

并且数据库将有一个条目" foo,bar"。

我不知道该怎么做才能存储enum,例如:

public enum Choices { Choice1, Choice2, Choice3 }

我收集我必须使用ParseToString来使用enum值,但我不知道该怎么做。

这似乎不对:

part.MyProperty = new[] return from name in Enum.GetNames(typeof(T))
   let enumValue = Convert.ToString((T)Enum.Parse(typeof(T), name, true))

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

part.MyProperty = Enum.GetNames(typeof(Choices));出了什么问题?

要获得以逗号分隔的列表,请使用String.Join

string csvEnums = string.Join(",", Enum.GetNames(typeof(Choices)));

答案 1 :(得分:0)

String.Join(",", Enum.GetNames(typeof(Choices)));

答案 2 :(得分:0)

此外,您可以构建自己的实用程序方法,以更好的语法获取枚举名称:

public static TEnum[] GetEnumValues<TEnum>() where TEnum : struct { 
   return (TEnum[])Enum.GetValues(typeof(TEnum)); 
}

然后:

Choices[] choices = GetEnumValues<Choices>();

part.MyProperty = GetEnumValues<Choices>().Select(n=>n.ToString()).ToArray();

答案 3 :(得分:0)

[Flags]
public enum Choices { 
   Choice1 = 1, 
   Choice2 = 2, 
   Choice3 = 4 
}

Choices a = Choices.Choice1 | Choices.Choice3;

Console.WriteLine(a.ToString());

输出:Choice1, Choice3