问题标签 [enum-flags]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5992 浏览

c# - 如何从标志枚举中获取数值?

可能重复:
枚举返回 int 值
如何从枚举中获取数值?

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

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

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

我怎样才能把它变成一个int?

我已经看到了selected将 ToString() 转换为每个选项然后将 split() 转换为每个选项的示例,例如

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

0 投票
4 回答
207 浏览

c# - 如何使编译器接受十六进制值?

我正在尝试使用http://www.pinvoke.net/default.aspx/coredll/playsound.html上的代码

但是,它会导致几个错误消息,即:“意外字符'×'” 26 次。

所以,我尝试将 vals 更改为逐字字符串,如下所示:

SND_SYNC = @"0×0000",

...但现在我得到“无法将类型'string'隐式转换为'int'

我意识到我可以将这些字符串转换为整数,但这真的是这样吗?恐怕我可以让它以这种方式编译,但它仍然无法工作(或更糟)。将这些十六进制值标记为这样的适当方法是什么,以便编译器接受它们?

这是代码的第一部分:

[DllImport("winmm.dll", SetLastError = true)] static extern bool PlaySound(string pszSound, UIntPtr hmod, uint fdwSound);

0 投票
0 回答
165 浏览

list - 枚举标志与字典相结合

找不到一个简单的方法来定义我的问题,但我会尽力解释它。

我需要能够表示预定义项目的选择,我在程序中有数千个这样的选择实例,并且需要一个可以表示每个实例的项目选择的单个值(许多选择会重复)。

在这一点上,我使用 Enum 的第一个解决方案似乎还可以,但我似乎有一个问题...... Enum 标志表示为每个唯一项目一个位,并且 64 位是该语言可以处理 Enum (C#) 的最大值,并且我有任意数量的值需要设置和取消设置。

示例解决方案 1:

我的第二个解决方案是构建一个选择列表并使用 ID 号在实例中引用此选择。

示例解决方案 2:

该解决方案的要求是低内存使用(我正在为移动应用程序开发它),易于使用(我需要能够即时编辑它)。

考虑到我的要求,哪种解决方案是最好的,我怎样才能做到这一点,或者简化它以满足我的要求?

0 投票
2 回答
267 浏览

c# - 如何将标志枚举映射到多个组合框?

我必须将标志枚举映射到多个组合框。

例如,前 2 位需要对应一个组合框,用于屏幕对比度设置:

位 2 & 3 需要对应语音音量

第 4 位和第 5 位对应于蜂鸣器音量。

第 6 位对应于入口或出口(即,如果它在它的入口,如果它关闭它的出口)

我的标志枚举定义为:

将这些映射到适当的组合框,然后将每个组合框的值转换为正确的枚举值以保存它的最佳方法是什么?

0 投票
1 回答
122 浏览

c++ - 是否有一种直观的方式来检查标志和状态?

找不到与我的案例相关的答案,所以我将尝试解释我的情况:

我有以下代码:

我的代码用于对文档进行词法分析,并且仅当我不在评论块中时才尝试执行操作。问题是,当我不在评论中时,上面的语句会返回完全相反的结果......

以下语句正确地完成了工作,但似乎相当违反直觉:

if (lexStatus & fInCommentBlock == fInCommentBlock)

所以问题是:

  • 为什么?为什么它的行为与我的预期完全相反?

由于运算符优先级if ((lexStatus & fInCommentBlock) != fInCommentBlock)修复了问题

  • 我正在接近正确的方式吗?
  • 有没有更好的办法?
  • 有没有办法确保每个标志都有不同的价值?

添加最后一个问题是因为出于某种原因lexStatus & fInCommentBlock,即使我没有在代码中的任何位置设置它们,也设置了一些位......

在此先感谢您的帮助!

0 投票
6 回答
39575 浏览

c# - 为什么标志枚举通常用十六进制值定义

很多时候,我看到使用十六进制值的标志枚举声明。例如:

当我声明一个枚举时,我通常是这样声明的:

为什么有些人选择用十六进制而不是十进制写值是否有理由或理由?在我看来,使用十六进制值并意外写入Flag5 = 0x16而不是Flag5 = 0x10.

0 投票
0 回答
380 浏览

json - 使用 FlagsEnum、ModelBinders 和 JSON

如何修改 ModelBinder 以使用 FlagsEnum (Enum: byte)?我将显示代码:

代码

枚举

班级

json

模型粘合剂

不使用 JSON时工作,两个 Enuns 作为 FlagsEnuns。

问题

可以看到,在 classPessoaViewModel中,属性Tipo可以为TipoPessoaEnum.

因为该属性Tipo可以取多个值,所以我发送(以 JSON 格式)一个Tipo "Tipo":["Comprador","Proprietario"]. 哪些是enuns的值。

如何将我的 json 数组映射 "Tipo":["Comprador","Proprietario"]到我的属性Tipo

模型粘合剂

GetValue<T>在类的方法中,CreditoImobiliarioModelBinderbindingContext.ValueProvider.GetValue("Tipo"); 返回 null ??

0 投票
3 回答
3699 浏览

c# - 检查枚举是否有任何共同的标志

考虑我有这个扩展方法:

以及以下情况:

我想检查 foo 是否有任何与 bar 相同的标志,但必须有更好的方法在扩展方法中实现这种行为。

我也试过这样,但总是返回 true:

0 投票
4 回答
5207 浏览

c# - 从逗号分隔的列表或整数中解析枚举标志

我有一个包含多个标志的 XML,其中一些是无符号的 32 位整数,而另一些是无符号的 64 位整数。其中一些以逗号分隔的列表编写,而另一些则以十六进制样式编写。

看这个例子:

由于我不想编写解析每个枚举的方法,因此我决定使用通用方法。但是 Visual Studio 不允许我构建解决方案。这是我的方法:

我得到的错误信息是:

错误 1 ​​运算符“|=”不能应用于“T”和“T”类型的操作数

有没有办法做到这一点?

0 投票
2 回答
2673 浏览

c# - 设置标志枚举的所有值,除了一个字段

我有以下声明

例如以下枚举:

现在我想设置除“清除”标志之外的所有标志。我试过这个:

但我收到以下消息

设置一个标志,例如:

工作正常。

所以问题是如何用我的方法设置 FlagEnum 的所有字段而不是“清除”字段?或者这是不可能的,我必须实现这个要求。