如何从标志枚举中获取数值? [复制]
Posted
技术标签:
【中文标题】如何从标志枚举中获取数值? [复制]【英文标题】:How to get the numeric value from a flags enum? [duplicate] 【发布时间】:2012-08-05 15:06:07 【问题描述】:可能重复:Enums returning int valueHow 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" ,
然后重组为相应的枚举,并从中获取值,但这有点混乱。有没有更直接的方法来获得这些值的总和?
【问题讨论】:
我认为这一篇包含了答案:***.com/questions/943398/enums-returning-int-valueint 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;
。
【参考方案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 & Option_A == Option_A
而不是 selected & Option_A == selected
:) (其他人也是如此)
感谢您 1. 在投票结束之前阅读实际问题,因为您似乎是唯一一个这样做的人,以及 2. 对答案进行破解。我希望有比这更强大的东西,但我会以此为起点,看看我能做些什么。如果它对我有用,我会选择它为正确的,并更新我需要的修改以使其工作。以上是关于如何从标志枚举中获取数值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章