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

本文关键字:反之亦然 CSV 转换 枚举 标志 | 更新日期: 2023-09-27 18:05:03

考虑以下enum:

[Flags]
public enum MyEnum
{
    Option1 = 0,
    Option2 = 1,
    Option3 = 2,
    Option4 = 4
}

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

基本上我想转换成:

var options = MyEnum.Option1 | MyEnum.Option3;

"Option1, Option3" 

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

建议吗?

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

好吧,除了Option1在标志枚举中没有多大意义之外,这只在默认情况下使用Enum.ParseEnum.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.GetValues,它得到一个枚举值的数组。然后,您可以循环遍历这些值,并根据Enum值对它们进行测试,将每个匹配的字符串值连接起来。另一种方法是,您可以使用Enum.GetName函数遍历值,以测试字符串是否包含该值的名称,然后重建该值。