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

Jam*_*mes 5 c# enums serialization

请考虑以下枚举:

[Flags]
public enum MyEnum
{
    Option1 = 0,
    Option2 = 1,
    Option3 = 2,
    Option4 = 4
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以将字符串等效(不是值)作为CSV字符串?通常我可以使用Enum.GetName函数将类型转换为字符串表示形式,但是,如果使用组合,则返回null.

所以基本上我想转换:

var options = MyEnum.Option1 | MyEnum.Option3;
Run Code Online (Sandbox Code Playgroud)

"Option1, Option3" 
Run Code Online (Sandbox Code Playgroud)

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

建议?

Jam*_*iec 7

好吧,除了Option1在标志枚举中没有多大意义之外,这只是默认使用Enum.ParseEnum.ToString().

从这开始:

var options = MyEnum.Option2 | MyEnum.Option3;
Console.WriteLine(options.ToString());
// Outputs: Option2, Option3
Run Code Online (Sandbox Code Playgroud)

然后你总是可以这样做:

var options2 = (MyEnum) Enum.Parse(typeof (MyEnum), "Option2, Option3");
Run Code Online (Sandbox Code Playgroud)

现在试试这个:

Console.WriteLine((options2 & MyEnum.Option2) == MyEnum.Option2);
Console.WriteLine((options2 & MyEnum.Option4) == MyEnum.Option4);
// Outputs:
//    true
//    false
Run Code Online (Sandbox Code Playgroud)

这似乎完全符合您的要求(同样,忽略了您的示例中的Option1永远不会发生的事实)

docs:Enum.Parse