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" }, |
然后重新构建到各自的枚举中,从中获取值,但有点混乱。有没有更直接的方法来得到这些值的总和?
- 我想这个包含了答案:stackoverflow.com/questions/943398/enums-returning-int-value
- int i = (int)myFlags;,然后是MyFlags myFlags = (MyFlags)i。按你的要求工作。
- 我花了8分钟才把这个贴出来,得到了一杯咖啡,我发现在我有机会思考发生了什么之前,它已经被回答、删除、评论和重新回答了。所有的注释、答案或注释都没有提到这样一个事实:我正试图获取所有选定标志的整数和,而不是单个选定的枚举项。我甚至在问题"option_a option_b"中指定了这个选项,但这似乎被忽略了,因为尝试建议的答案会导致编译器错误:"cannot convert system.enum to int"。感谢您关闭它。
- @戴维德夫,如果你有Enum selected = Options.Option_A | Options.Option_B;,然后试着向int投射,你会得到错误,但你的问题是Options selected = ...;。
- 当我认为需要组成枚举标志掩码的所有值作为单个int时,我是否正确理解您?或者您想要selected的int值(3)?
- 因为,没有看到删除的评论/答案,我会回答var selectedAsInt = (int)selected;。
- 为什么不是复制品?只是说它不是复制品,不解释为什么没有帮助。你应该解释为什么其他问题的答案对你没有帮助,而不是说"这不是重复的"。
没有太多的选择,只要做一个如果
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列表中得到结果的所有组成值的列表。
如果这不是你想要的,请澄清。
- 正如我在回复你对我答案的评论时所提到的:这个问题要求获得3分,所以直接的演员阵容是唯一需要的。我删除了我的答案,因为这是一个副本的其他问题已经有了完美的答案。
- 顺便问一句,从问题"所选值应对应于3"和"是否有更直接的方法来获得这些值的总和?"
- @hvd:由于我没有看到任何评论,从操作,我仍然认为他是在要求的东西,我写在我的答案。
- 哦,我想你是说selected & Option_A == Option_A,而不是selected & Option_A == selected:(其他人也一样)
- 由于可以同时设置不同的选项,因此必须删除else。if(selected & Option_A == Option_A) ...; if(selected & Option_B == Option_B) ...;
- 谢谢1。在投票结束之前阅读实际问题,因为你似乎是唯一一个这样做的人。在回答问题的时候尝试一下。我希望有比这更强大的东西,但我会把它作为一个起点,看看我能做些什么。如果它对我有用,我会选择它作为正确的,并根据需要进行修改来更新它。
- @hvd:该死,核心,thx。
- @戴夫:不客气。为了将来,试着清楚地陈述,你在要求什么。事实上,在这里你到底想要什么还不太清楚,很多读过这篇文章的人,都是在陷阱中失败的。