有没有简单的方法将c#枚举转换为字符串,然后再返回?
我需要将枚举值列表转换为单个字符串存储在我的数据库;然后再从数据库中检索时再转换回来。有没有简单的方法将c#枚举转换为字符串,然后再返回?
每个枚举的值当前是一个简单的整数,所以创建一个额外的表来处理这个问题有点矫枉过正。
因此,在下面的例子中,如果用户选择了母亲,父亲和姐姐,然后存储在数据库中的值将是“0,1,3”
public enum MyEnum
{
Mother = 0,
Father = 1,
Gran = 2,
Sister = 3,
Brother = 4
}
我是新来的C# ,所以不知道是否有一个很好的现成的方式来做到这一点 - 谷歌狩猎时我找不到任何明显的东西!
干杯提前:) L -
下面将通过来回转换枚举值的阵列之间“ 0,1,3“根据要求:
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();
只需使用ToString
转换为名称,使用Enum.TryParse
(或Enum.Parse
,如果你不是在.NET 4)转换回。
如果您希望一个枚举字段包含多个值(例如MyEnum.Mother | MyEnum.Father),则需要将其转换为Flags
enum,如@WraithNath suggested。否则,你说的是分别存储每个选项(没有办法将Mother
和Father
与当前设置一起存储在同一个字段中)。
枚举的是明确地能够被转换为/从整数
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");
从你的代码是
MyEnum a = MyEnum.Mother;
string thestring = a.ToString();
MyEnum b = (MyEnum) Enum.Parse(typeof(MyEnum), thestring);
如果你改变枚举值:
[Flags]
public enum MyEnum
{
Mother = 1,
Father = 2,
Gran = 4,
Sister = 8,
Brother = 16,
}
然后你可以存储父亲和Gran为6
兄妹为24等
通过使用二进制数字,您不应该通过组合它们来获得重复值
+1对于久经考验的方法。 – Joe 2011-01-27 14:05:34
+1。虽然这个枚举应该标有[Flags] – 2011-01-27 14:05:47
字符串Equivelant
MyEnum value = MyEnum.Father;
value.ToString(); // prints Father
解析
(MyEnum)Enum.Parse(typeof(MyEnum), "Father"); // returns MyEnum.Father
Enum
s时,可以投给和从整数值。这可能是你最好的选择。
如果你真的要使用字符串,ToString
将返回“母亲”,“父亲”,“格兰”等。从字符串铸造回来也只是一个功能:
private MyEnum GetEnumValue(string fromDB)
{
if(fromDB == "Mother") return MyEnum.Mother;
else if(fromDB == "Father") return MyEnum.Father;
//etc. etc.
}
编辑: 伊恩的答案铸造背面是做的更“C#-ey”的方式,而且是更为扩展(句柄增加新的价值观枚举更灵活)。
继Jamiec的建议(这非常适合您的需求),如果你需要防御性代码,你的施法,尝试:
if (Enum.IsDefined(typeof(MyEnum), <your database value>))
{
// Safe to convert your enumeration at this point:
MyEnum value = (MyEnum)1;
}
那些是`int`,而不是`string`的请求。 – 2011-01-27 14:04:52
@Fredrik但他也说明如何转换为字符串? – 2011-01-27 14:08:31
@Oskar:我认为,当我发布评论时,那部分内容并不存在。无论哪种方式,我认为我实际上误解了这个问题;这看起来很像所要求的。 – 2011-01-27 14:31:42