EnumFlags 到枚举值的字符串列表 C#

EnumFlags To List of Strings of Enum values C#

我正在尝试获取标志枚举值的字符串列表

我有两个枚举

enum example {
 name0 = 0,
 name1 = 1,
 name2 = 2,
 name3 = 3
}
//And a flagged enum
[Flags]
enum example2 {
 none = 0,
 name1 = 1 <<example.name1,
 name2 = 1 << example.name2,
 name3 = 1 << example.name3
}

我设置了一个带标记的枚举。

example2 = name1 | name2;

我想做的是,从那个 example2 = name1 | 2;获取具有第一个枚举的整数值的字符串列表。

到目前为止,我已经尝试制作一个带有标记的枚举的字符串列表: 示例:

example2.toString()

//result: "name1, name2"
//I'm not quite sure how to proceed with this, I've read the documentation but can't find something helpful, probably to split and trim the string to get a list of names, then iterate over that list and somehow get the numeric value using the names
/* 
   result I'm trying to achieve:
   ["1", "2"] <-- List of strings of int values corresponding to those names.
*/

有谁知道这样做的好方法吗?

~这是我的第一个问题,如果解释不好请见谅。

好的,只要你告诉@Rufus L,就有一个简单的解决方案

using System;
                
public class Program
{
    public static void Main()
    {
        Console.WriteLine(((int)Name.TEST).ToString());
        Console.WriteLine(((short)Name.TEST2).ToString());
        Console.WriteLine(((long)Name.TEST3).ToString());
    }

}
public enum Name
{
    TEST,
    TEST2,
    TEST3
}

输出为 0, 1, 2 。我用不同的类型解析它,因为也许你需要更大的数字。

我正在编辑我的答案以防万一,因为我认为那不是您所需要的,但它可能会派上用场,所以我保留它,如果您想将文字字符串转换为枚举值,你需要像这样解析它

var enumVal = (Name)Enum.Parse(typeof(Name), "TEST");

然后你可以应用我之前写的

假设您的 example2 枚举名称与其未移位的示例名称相同:

var ex = example2.name1 | example2.name2;
    
var list = 
    Enum.GetValues(typeof(example2))
       .OfType<example2>()
       .Skip(1)
       .Where(x => (ex & x) == x)
       .Cast<int>()
       .Select(x => Math.Log(x,2));

Console.WriteLine(string.Join(",", list); 

生产

1, 2

并且您可以根据需要将它们转换为字符串。也就是说,您可以在不创建字符串并且不将它们解析回整数的情况下完成此操作。