C# 从枚举标志转换CSV,反之亦然

C# 从枚举标志转换CSV,反之亦然,c#,serialization,enums,C#,Serialization,Enums,考虑以下枚举: [Flags] public enum MyEnum { Option1 = 0, Option2 = 1, Option3 = 2, Option4 = 4 } 是否有一种方法可以将字符串等价物(而不是值)作为CSV字符串获取?通常,我可以使用函数将类型转换为字符串表示形式,但是,如果使用组合,则返回null 所以基本上我想转换: var options = MyEnum.Option1 | MyEnum.Option3; 进入 然后我希望能

考虑以下枚举:

[Flags]
public enum MyEnum
{
    Option1 = 0,
    Option2 = 1,
    Option3 = 2,
    Option4 = 4
}
是否有一种方法可以将字符串等价物(而不是值)作为CSV字符串获取?通常,我可以使用函数将类型转换为字符串表示形式,但是,如果使用组合,则返回null

所以基本上我想转换:

var options = MyEnum.Option1 | MyEnum.Option3;
进入

然后我希望能够将“Option1,Option3”转换回
MyEnum.Option1 | MyEnum.Option2


建议?

您可以执行一个
Enum.GetValues
来获取枚举值数组。然后,可以循环遍历这些值,并根据枚举值测试它们,将匹配的每个值的字符串值连接起来。另一种方法是使用
Enum.GetName
函数循环遍历值,以测试字符串是否包含该值名称,然后重新生成值。

好的,除了
选项1
在标志枚举中没有多大意义之外,这只是默认情况下使用
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
这似乎正是您想要的(再次忽略您的示例中的选项1永远不会出现的事实)


docs:

是否
enum.GetName
仅当它是值的组合时才返回null,或者一直返回null?@Kratz-很抱歉,只是当它是一个组合时,我会更新我的帖子,因为它并没有真正说明这一点。我从未真正意识到
ToString()
在.NET 3.5中会这样做,我还以为它是.NET 4.0的功能。。。我真傻+1.
Console.WriteLine((options2 & MyEnum.Option2) == MyEnum.Option2);
Console.WriteLine((options2 & MyEnum.Option4) == MyEnum.Option4);
// Outputs:
//    true
//    false