如何从标志枚举中获取数值? [复制]

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-value 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; 【参考方案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. 对答案进行破解。我希望有比这更强大的东西,但我会以此为起点,看看我能做些什么。如果它对我有用,我会选择它为正确的,并更新我需要的修改以使其工作。

以上是关于如何从标志枚举中获取数值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Rails 中的枚举中获取整数值?

如何从提示框中获取数值? [复制]

如何在使用IMetadataImport时获取枚举值

如何在 C# 中获取枚举项? [复制]

如何从 MySQL 列中缺失的有序值中获取最小值? [复制]

在 Bash 中,选项标志值如何存储在变量中? [复制]