我需要将枚举值列表转换为单个字符串以存储在我的数据库中;当我从数据库中检索时再转换回来。
每个枚举的值当前都是一个简单的整数,因此创建一个额外的表来处理这个问题感觉有点过分。
因此,在下面的示例中,如果用户选择Mother,Father和Sister,那么存储在数据库中的值将为“0,1,3”
public enum MyEnum
{
Mother = 0,
Father = 1,
Gran = 2,
Sister = 3,
Brother = 4
}
我是c#的新手,所以不确定是否有一个很好的开箱即用的方式 - 当谷歌狩猎时我找不到任何明显的东西!
提前干杯:) - L
答案 0 :(得分:9)
枚举明确能够转换为整数/从整数转换
int value = (int)MyEnum.Mother;
和
MyEnum value = (MyEnum)1;
对于字符串,请使用ToString
和Enum.Parse
string value = MyEnum.Mother.ToString();
和
MyEnum value = (MyEnum)Enum.Parse(typeof(MyEnum),"Mother");
答案 1 :(得分:4)
如果您将枚举值更改为:
[Flags]
public enum MyEnum
{
Mother = 1,
Father = 2,
Gran = 4,
Sister = 8,
Brother = 16,
}
然后你可以将父亲和格兰存储为6
姊妹和兄弟等24岁
通过使用二进制数字,您不应通过组合它们获得重复值
答案 2 :(得分:3)
只需使用ToString
转换为名称,然后使用Enum.TryParse
(或Enum.Parse
(如果您不在.NET 4上)转换回来。
如果您希望一个枚举字段包含多个值(例如MyEnum.Mother | MyEnum.Father),则需要将其转换为Flags
enum,@WraithNath suggested。否则,您所说的是单独存储每个选项(无法将Mother
和Father
存储在当前设置的相同字段中。
答案 3 :(得分:3)
以下将根据要求通过“0,1,3”在Enum值数组之间来回转换:
MyEnum[] selection = { MyEnum.Mother, MyEnum.Father, MyEnum.Sister };
string str = string.Join(",", selection.Cast<int>());
MyEnum[] enm = str.Split(',').Select(s => int.Parse(s)).Cast<MyEnum>().ToArray();
答案 4 :(得分:2)
来自您的代码
MyEnum a = MyEnum.Mother;
string thestring = a.ToString();
MyEnum b = (MyEnum) Enum.Parse(typeof(MyEnum), thestring);
答案 5 :(得分:1)
String Equivelant
MyEnum value = MyEnum.Father;
value.ToString(); // prints Father
解析
(MyEnum)Enum.Parse(typeof(MyEnum), "Father"); // returns MyEnum.Father
答案 6 :(得分:0)
Enum
可以转换为整数值。这可能是你最好的选择。
如果你真的想使用字符串,ToString
将返回“母亲”,“父亲”,“格兰”等。从字符串中回来只会是一个函数:
private MyEnum GetEnumValue(string fromDB)
{
if( fromDB == "Mother" ) return MyEnum.Mother;
else if( fromDB == "Father") return MyEnum.Father;
//etc. etc.
}
编辑: Ian回复的答案是更多的“C#-ey”方式,并且更具可扩展性(处理更灵活地为枚举添加新值)。
答案 7 :(得分:0)
根据Jamiec的建议(适合您的需要),如果您需要对您的演员进行防御性编码,请尝试:
if (Enum.IsDefined(typeof(MyEnum), <your database value>))
{
// Safe to convert your enumeration at this point:
MyEnum value = (MyEnum)1;
}