繁体   English   中英

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

[英]EnumFlags To List of Strings of Enum values C#

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

我有两个枚举

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; 获取具有第一个枚举的 integer 值的字符串列表。

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

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
}

其中 Output 是 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM