簡體   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