标签: flags

使用[Flags]属性定义C#枚举的多种方法?

我理解Enums如何在C#中工作,我得到了Flags属性带给表的内容.

我在这里看到了这个问题.推荐第一种口味,但没有提供任何理由/理由.

这两个定义的方式有什么不同,一个比另一个好吗?使用第一个synax代替第二个synax有什么好处?在定义Flags类型Enums时,我总是使用第二种风格......我一直都在做错吗?

[Serializable]
[Flags]
public enum SiteRoles
{
    User = 1 << 0,
    Admin = 1 << 1,
    Helpdesk = 1 << 2
}
Run Code Online (Sandbox Code Playgroud)

那是不一样的

[Serializable]
[Flags]
public enum SiteRoles
{
    User = 1,
    Admin = 2,
    Helpdesk = 4
}
Run Code Online (Sandbox Code Playgroud)

.net c# enums flags

6
推荐指数
2
解决办法
4151
查看次数

C#中的私有值标记枚举

我在C#中创建了一个标志枚举,类似于以下内容:

    [Flags]
    public enum DriversLicenseFlags
    {
        None = 0,

        Suspended = 1 << 1,
        Revoked   = 1 << 2,

        Restored  = 1 << 3,
        SuspendedAndRestored = Suspended | Restored,
        RevokedAndRestored   = Revoked   | Restored,
    }
Run Code Online (Sandbox Code Playgroud)

关于我的意图的一些注意事项:

  • Suspended并且Revoked是可以但不一定导致恢复的独特状态.
  • Restored应该只有在用户已经SuspendedRevoked(或两者都有)的情况下才有可能.重要的是要具体跟踪哪个事件是恢复的前兆.
  • 许可证可以是SuspendedRevoked(和Restored)

另外,我试图坚持在MSDN的Designing Flags Enumerations中提出的建议.特别是:

  • 考虑为常用的标志组合提供特殊的枚举值.
    • SuspendedAndRestored并且RevokedAndRestored两者都很常见.
  • 当某些值组合无效时,请避免创建标志枚举.
    • 这是我的问题,因为Restored除非至少有一个是无效的Suspended,并Revoked设置.

理想情况下,我希望Restored在内部使用的枚举中存在一个值,但只能通过某些有效组合公开设置.不幸的是,internal它不是枚举值的有效修饰符.

我想过几个选择,但每个似乎都有缺点:

  1. 保留Restored作为公共值,请注意注释中的限制,并对公共API上的无效组合进行前置条件检查. …

c# enums flags design-patterns

6
推荐指数
1
解决办法
2080
查看次数

避免将某些参数混合到脚本中

我有一个脚本,可以使用几十个参数/标志Getopt::Long.某些标志不允许混合,例如:--linux --unix不允许一起提供.现在我知道我可以使用if声明检查,但我确信有更清洁,更好的方法.

if 如果我不想允许许多标志组合,块可能会变得丑陋.

有什么建议?

谢谢,

perl flags arguments

6
推荐指数
1
解决办法
145
查看次数

Haxe - 将枚举作为标志发送到函数

我只是想将我的代码从C#转换为Haxe NME.我使用枚举作为标志.

[Flags]
enum State
{
    StateOne    = 1,
    StateTwo    = 2,
    StateThree  = 4
}
Run Code Online (Sandbox Code Playgroud)

并使用它

if (someObj.HasState(State.StateOne | State.StateTwo))
{
    // Contains both the states. Do something now.
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何在Haxe NME中这样做.

谢谢.

enums flags haxe enum-flags nme

6
推荐指数
2
解决办法
1164
查看次数

为什么6502的中断标志的初始状态为1?

我正在模拟6502处理器,我差不多完成了(现在处于测试阶段)并且我正在使用来自nesdev站点的一些NES测试,它告诉我中断标志和未使用的第5个标志都是最初应该设置为1(即禁用中断),但为什么呢?我可以理解未使用的标志部分,因为它......很好......未使用,但我不明白中断标志.我试过在Google上搜索,有些网站确认它应该设置为1,但没有人解释这背后的原因.为什么中断应该从程序开始被阻止?

flags interrupt 6502 emulation cpu-registers

6
推荐指数
1
解决办法
1518
查看次数

设置生产中具有与dev中不同的值的标志的一般做法是什么

假设我有一面旗帜public static final boolean FLAG.在开发中,我希望它是true,但在生产中,我希望它是false.

我是否应该true在开发过程中将其设置为,并且当我们构建/发布时,有人会进入并将其更改为false

我有一种感觉,因为它看起来很糟糕,所以不是这样的.

我应该采取什么方法?

java flags

6
推荐指数
1
解决办法
117
查看次数

从bitarray改为enum

我目前有一些粗略的谷歌代码..这有效,但我想换成枚举.

目前我需要一个字节来表示一些设置的位标志,

我目前有这个:

 BitArray bitArray =new BitArray(new bool[] { true, true, false, false, false, false, false, false });
Run Code Online (Sandbox Code Playgroud)

用于排队..

new byte[] {ConvertToByte(bitArray)})
Run Code Online (Sandbox Code Playgroud)

使用此站点的ConvertToByte ...

    private static byte ConvertToByte(BitArray bits) // http://stackoverflow.com/questions/560123/convert-from-bitarray-to-byte
    {
        if (bits.Count != 8)
        {
            throw new ArgumentException("incorrect number of bits");
        }
        byte[] bytes = new byte[1];
        bits.CopyTo(bytes, 0);
        return bytes[0];
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我触及时,我想使用枚举,所以我创建它:

[Flags]
public enum EventMessageTypes
{
    None = 0,
    aaa = 1, 
    bbb = 2, 
    ccc = 4, 
    ddd = 8, 
    eee = 16,
    fff = …
Run Code Online (Sandbox Code Playgroud)

c# enums flags

6
推荐指数
1
解决办法
682
查看次数

x86程序执行期间方向标志(DF)的默认状态

在反汇编中,我经常看到正在使用字符串操作指令而不考虑方向标志(DF)的状态,如下所示:

or      ecx, 0FFFFFFFFh
xor     eax, eax
mov     edi, ebp
repne scasb
Run Code Online (Sandbox Code Playgroud)

CLD或者STD在函数开始后没有找到指令,也没有其他可能影响DF标志的指令.
那么,编译器在程序启动后,假定程序运行时,假定程序运行时保持预定义状态,并且在程序运行时保持不变?

x86 assembly flags cpu-registers

6
推荐指数
2
解决办法
478
查看次数

当包含有意义的空格时,如何编写与 re.VERBOSE 一起使用的模式?

添加 re.VERBOSE 时,包含有意义空格的正则表达式会中断,这显然是因为 re.VERBOSE“有用”地将“问题摘要”中的(有意义的)空格以及所有糟糕的无意义空格(例如填充和换行符内的(多行)模式)。(我在多行中使用 re.VERBOSE 是不可协商的 - 这实际上是对巨大的多行正则表达式的大规模简化,其中 re.VERBOSE 是必要的,只是为了保持理智。)

import re
re.match(r'''Issue Summary.*''', 'Issue Summary: fails''', re.U|re.VERBOSE)
# No match!
re.match(r'''Issue Summary.*''', 'Issue Summary: passes''', re.U)
<_sre.SRE_Match object at 0x10ba36030>
re.match(r'Issue Summary.*', 'Issue Summary: passes''', re.U)
<_sre.SRE_Match object at 0x10b98ff38>
Run Code Online (Sandbox Code Playgroud)

是否有更明智的替代方案来编写包含有意义空格的 re.VERBOSE 友好模式,而不是用“\s”或“.”替换我的模式中的每个实例,这不仅丑陋而且违反直觉并且自动化很痛苦?

re.match(r'Issue\sSummary.*''', 'Issue Summary: fails', re.VERBOSE)
<_sre.SRE_Match object at 0x10ba36030>
re.match(r'Issue.Summary.*''', 'Issue Summary: fails', re.VERBOSE)
<_sre.SRE_Match object at 0x10b98ff38>
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,这是 Python 2 和 3 上的一个有用的 docbug 捕获。一旦我在此处就正确的解决方案达成共识,我就会将其归档)

python regex flags whitespace

6
推荐指数
1
解决办法
903
查看次数

做java标志Xms和Xmx覆盖标志XX:+ UseCGroupMemoryLimitForHeap?

我正在Kubernetes中运行一个容器化的java应用程序.

为了根据容器规范制作jvm保留存储器,-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap必须设置标志.

如果这两个标志都与Xms和Xmx标志一起设置,那么jvm的行为是什么?一面旗帜会覆盖另一面吗?

例如,如果我们java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Xms -Xms2500M -Xmx2500M -jar myjar.jar 在容器中有容量限制4Gi用于请求而4Gi用于响应,则在具有128Gi内存的主机中,JVM会保留多少内存?

java flags containers docker kubernetes

6
推荐指数
1
解决办法
5841
查看次数