考虑以下枚举:
[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
.
建议?
最佳答案
好吧,除了 Option1
在 flags 枚举中没有多大意义,这只是默认情况下使用 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 永远不会发生的事实)
文档:Enum.Parse
关于c# - 从枚举标志转换 CSV,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6997049/