我正在尝试获取Flags Enum 值的字符串列表
我有两个枚举
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;
我想做的是,从这个例子来看,2=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.
*/
有人知道这样做的好方法吗?
~这是我的第一个问题,如果解释不好,很抱歉。
假设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
如果你愿意,你可以把它们转换成字符串。也就是说,您可以在不创建字符串和不将它们解析回int的情况下实现这一点。
好的,如果你告诉@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");
然后你可以应用我之前写的