关于C#:如何从标志枚举中获取数值?

How to get the numeric value from a flags enum?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Enums returning int value
How to get the numeric value from the Enum?

这两个都不是,谢谢你阅读问答模块。

假设我选择了一些标志枚举项:

1
2
3
4
5
6
7
8
9
10
11
[Flags]
public enum Options
{
    None = 0,
    Option_A = 1,
    Option_B = 2,
    Option_C = 4,
    Option_D = 8,
}

Options selected = Options.Option_A | Options.Option_B;

selected的值应对应于3(即2+1)。

我怎么能把这个变成int?

我见过这样的例子,其中selected被强制转换为string(),然后将()拆分为每个选项,例如。

1
"Option_A | Option_B" --> {"Option_A","Option_B" },

然后重新构建到各自的枚举中,从中获取值,但有点混乱。有没有更直接的方法来得到这些值的总和?


没有太多的选择,只要做一个如果

1
2
3
4
5
6
List<int> composedValues = new ....
if((selected & Option_A) == Options.Option_A)
    composedValues.Add((int)Options.Option_A);
else if((selected & Option_B) == Options.Option_B)
    composedValues.Add((int)Options.Option_B);
else if(...)

最后,您将在composedValues列表中得到结果的所有组成值的列表。

如果这不是你想要的,请澄清。