【问题标题】:How to get the numeric value from a flags enum? [duplicate]如何从标志枚举中获取数值? [复制]
【发布时间】:2012-08-05 15:06:07
【问题描述】:

可能重复:
Enums returning int value
How to get the numeric value from the Enum?

这不是其中任何一个的重复,感谢阅读问题模式

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

[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 转换为 ToString() 然后将 split() 转换为每个选项的示例,例如

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

然后重组为相应的枚举,并从中获取值,但这有点混乱。有没有更直接的方法来获得这些值的总和?

【问题讨论】:

  • int i = (int)myFlags; 然后MyFlags myFlags = (MyFlags)i。按您的要求工作。
  • 在我发布这篇文章并喝杯咖啡的 8 分钟内,我发现它已经被回答、删除、评论和重新回答,然后我什至有机会思考什么是继续。 cmets 或答案或 cmets 都没有解决我试图获取所有选定标志的整数和的事实,不是单个选定的枚举项。我什至在问题“Option_A | Option_B”中指定了但似乎被忽略了,因为尝试建议的答案会导致编译器错误:“无法将 System.Enum 转换为 int”。感谢您关闭它。
  • @DaveDev 如果你有Enum selected = Options.Option_A | Options.Option_B;,然后尝试转换为int,这就是你得到的错误,但你的问题有Options selected = ...;
  • '因为没有看到已删除的 cmets/answers,我会回答 var selectedAsInt = (int)selected;

标签: c# enums enum-flags


【解决方案1】:

没有太多选择,只做一个 if

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 列表中获得结果的所有组成值的列表。

如果这不是您的要求,请澄清。

【讨论】:

  • 正如我在回复您对我的回答的评论时提到的那样:问题要求获得 3,因此只需要直接转换即可。我删除了我的答案,因为与此重复的其他问题已经有了非常好的答案。
  • 顺便说一句,从问题中,“选择的值应该对应于 3”和“有没有更直接的方法来获得这些值的总和?”
  • @hvd:因为我没有看到 OP 的 任何 评论,我仍然认为他要我写下的东西我的回答。
  • 哦,我认为您的意思是 selected &amp; Option_A == Option_A 而不是 selected &amp; Option_A == selected :) (其他人也是如此)
  • 感谢您 1. 在投票结束之前阅读实际问题,因为您似乎是唯一一个这样做的人,以及 2. 对答案进行破解。我希望有比这更强大的东西,但我会以此为起点,看看我能做些什么。如果它对我有用,我会选择它为正确的,并更新我需要的修改以使其工作。
猜你喜欢
  • 2013-08-14
  • 1970-01-01
  • 2011-02-08
  • 2010-12-05
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多