问题标签 [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 投票
2 回答
270 浏览

c# - 当 [Flags] 枚举类型未定义它时,我应该如何表示 None 的值?

今天在使用 XNA 时,我注意到使用的枚举类型之一[Flags]没有None = 0值:

根据 MSDN 关于正确使用该[Flags]属性

请命名标志枚举的零值None。对于标志枚举,该值必须始终表示所有标志都已清除。

如果我想指示一个没有按下按钮的值,是否会违背枚举类型的意图来使用值 0 并将其强制转换为Buttons?根据设计指南,它应该有这个值,但它没有。

0 投票
2 回答
1052 浏览

c# - 获取所有包含标志

我有一个包含一些标志的变量,以及我如何能够检查设置了哪些标志的变量。

我的旗帜。

这是我检查我的标志的地方

显然我不能用这种方式来检查标志。

为了清楚起见,我想知道按钮中设置了哪些标志。

更新:我不能使用 Enum.hasFlag() 因为我在 Unity 中制作游戏并且它使用 Mono。显然 Mono 还不支持 hasFlag。

0 投票
1 回答
5627 浏览

c# - 使用复选框回发带有标志的枚举

我有一个枚举属性,我试图通过复选框设置它的值。枚举被标记,当用户选择多个选项时,我希望该属性将所有选定的标志连接起来。

我尝试为每个枚举值添加一个复选框,并为每个复选框赋予相同的名称。在回发期间,将检索第一个选定的标志,但不与其他标志连接。

我可以以某种方式解决此问题,而无需为每个标志设置单独的属性吗?

模型

看法

控制器

0 投票
3 回答
203 浏览

c# - C#枚举标志——两种方式绑定——枚举——类——枚举

我有以下枚举

在 UI 中,用户可以选择特定的日子:例如星期一、星期二、星期三。星期一、星期二、星期三的用户选择是 7。此值保存在数据库中名为 Days 的列中。

现在,如果我有课:

如何绑定该值 7 并使适当的属性为真或假。示例:7 等价于星期一、星期二、星期三枚举。如果我将值 7 转换为我的类周,结果将是属性:星期一、星期二、星期三为真,其余为假。

相反,如果我有一个班级周,其中属性:星期一,星期二,星期三为真,并将其转换为枚举 WeekDays,结果将为 7。

我怎样才能做到这一点?

0 投票
2 回答
1562 浏览

c# - .NET enum.HasFlag() 错误?

我正在使用以下 .NET 4.5.2 代码:

为什么当 ContainsFocus (bool = true) 和 keyData (System.Windows.Forms.Keys) 为 Keys.O 时表达式为真 | Keys.Shift?

如您所见,断点被击中:

断点截图

使用此值:

看截图

此错误(?!)的解决方法是:

0 投票
4 回答
259 浏览

c# - 比较标志与标志 - 检查匹配

假设我有一个枚举:

我有以下内容:

我想检查是否有任何selected标志也在compare标志中。

到目前为止,我能想到的唯一方法是(伪代码)

有没有更合乎逻辑的方法来做到这一点?

0 投票
3 回答
1546 浏览

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

尝试从枚举值中获取所有可能标志的数组,例如 3 到 {1, 2} 的数组。

我有一个扩展

......但这样做似乎有点浪费。这可以更有效地完成吗?

0 投票
4 回答
1299 浏览

c# - 无法理解具有 0x2 值的枚举标志

我正在尝试理解一部分代码,但到目前为止还无法理解...

我想知道为什么pp.HasFlag(Products.Dew)isTruepp.HasFlag(Products.Miranda)is False。我认为它的工作方式为 0x1 = 1、0x2 = 2、0x3 = 4、0x4 = 8、0x5 = 16。请指导我发生了什么

0 投票
2 回答
1056 浏览

java - 将标志(或不)传递给Java中的构造函数

例如,为大致相同的任务使用不同名称的方法是有意义的

  • open(String filename);
  • createThenOpen(String filename); // First create the file with default contents, then process the file.

这种命名方法不适用于构造函数。想象一下构造函数采用上面的文件名。我有多种选择来处理这两种情况:

  1. 构造函数中的 if 语句:如果文件不存在,则创建它。这不好,因为构造函数的行为是隐式的,调用者可能会创建不需要的文件而不是打开现有文件。
  2. 向构造函数添加一个标志:MyClass(String filename, boolean createNew). 不是很好,因为像这样的电话MyClass("hello.txt", true)是神秘的。
  3. 重载使得单个参数始终假定文件存在,并且附加虚拟参数的存在意味着应该创建文件。这也是丑陋的。
  4. 添加一个字符串标志,如RandomAccessFile(File file, String mode)where modeis "r""rw"依此类推。对于我的目的来说,这感觉非常笨拙。
  5. 添加一个enum类似于Files's的 -flag copy(Path source, Path target, CopyOption... options)。感觉也很笨拙。
  6. 具有不带参数的构造函数,然后在创建对象后立即调用像上面这样的单独方法。不好,因为没有使用指定文件中的数据实例化我的对象的实例是没有意义的。

目前,我似乎实际上更喜欢上面的数字 (6),并且只需在无参数构造函数之后立即调用两个具有不同名称的方法。我是否忽略了任何选项,或者是否有针对这些场景的“给定”方法?

编辑:正如下面其他人所指出的,当然还有第 7 个,也许是最明显的选项:

  1. 使用工厂方法!
0 投票
1 回答
994 浏览

c# - 如何在 WPF 中为 [Flags] 枚举进行通用开关?

所以我已经为一周中的日子定义了一个枚举,虽然我可以制作一个简单的网格来显示一周中的所有日子并随意切换它们(想想一个循环日历日应用程序)。但是,我想将此模式应用于[Flags]我的应用程序中的其他枚举,并且我不想一遍又一遍地编写所有这些锅炉#plate 代码。有什么建议么?谢谢!