有没有办法将字符串列表转换为c#中的枚举标志?

问题描述:

我有一个字符串列表的XML文档中:有没有办法将字符串列表转换为c#中的枚举标志?

<properties>red yellow blue</properties> 

,我有一个枚举:

[Flags] 
public enum Properties 
{ 
    None = 0, 
    red = 1, 
    yellow = 2, 
    blue = 4, 
    green = 8 
} 

有没有办法将XML字符串转换成7或枚举标志值0111

围绕着做相反的事情有无数的资源,但我无法找到关于从字符串转换为标志的任何信息。

+0

您是否要求在运行时创建编译时构造?你也许可以用反射来做到这一点,但我相信这里可能有另一种'enum'。 –

是的,但你需要他们用逗号分隔:

[Flags] 
public enum Test 
{ 
    A = 1, 
    B = 2, 
    C = 4 
} 

Test t; 
Enum.TryParse<Test>("A,B", out t); 

既然你不能在名称中包含空格,你可以做一个字符串的空间调用的TryParse前更换到逗号。

当然

string flags = "red yellow blue"; 

var eflags = flags.Split() 
        .Select(s => (Properties)Enum.Parse(typeof(Properties), s)) 
        .Aggregate((a, e) => a | e); 

Console.WriteLine(eflags); 
Console.WriteLine((int)eflags); 

Outpus

红,黄,蓝

我会留下怎样获取字符串从XML高达您。

+2

这是我见过的最快的投票。 – juharr

+0

显然有人正在进行投票*......我也立即得到了一个。为什么我甚至都与这个网站大声笑? – SledgeHammer

+0

@SledgeHammer现在我已经看到它在投票和反对票之间来回滚动3次或4次。有趣。 – juharr