考虑以下枚举:
[Flags]
public enum MyEnum
{
Option1 = 0,
Option2 = 1,
Option3 = 2,
Option4 = 4
}
有没有一种方法可以将字符串等效(不是值)作为CSV字符串?通常我可以使用Enum.GetName函数将类型转换为字符串表示形式,但是,如果使用组合,则返回null。
所以基本上我想转换:
var options = MyEnum.Option1 | MyEnum.Option3;
进入
"Option1, Option3"
然后我希望能够将“Option1,Option3”转换回MyEnum.Option1 | MyEnum.Option2
。
建议?
答案 0 :(得分:7)
嗯,除了Option1
在标记枚举中没有多大意义之外,默认情况下这只是使用Enum.Parse
和Enum.ToString()
。
从这开始:
var options = MyEnum.Option2 | MyEnum.Option3;
Console.WriteLine(options.ToString());
// Outputs: Option2, Option3
然后你可以随时这样做:
var options2 = (MyEnum) Enum.Parse(typeof (MyEnum), "Option2, Option3");
现在试试这个:
Console.WriteLine((options2 & MyEnum.Option2) == MyEnum.Option2);
Console.WriteLine((options2 & MyEnum.Option4) == MyEnum.Option4);
// Outputs:
// true
// false
这似乎完全符合您的要求(再次,忽略了您的示例中的Option1永远不会发生的事实)
docs:Enum.Parse
答案 1 :(得分:0)
你可以做一个Enum.GetValues
来获取一个枚举值数组。然后,您可以遍历这些值并根据您的Enum值测试它们,连接每个匹配的字符串值。另一种方法是使用Enum.GetName
函数循环遍历值,以测试您的字符串是否包含该值名称,然后重建该值。