我理解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) 我在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应该只有在用户已经Suspended或Revoked(或两者都有)的情况下才有可能.重要的是要具体跟踪哪个事件是恢复的前兆.Suspended和Revoked(和Restored)另外,我试图坚持在MSDN的Designing Flags Enumerations中提出的建议.特别是:
SuspendedAndRestored并且RevokedAndRestored两者都很常见.Restored除非至少有一个是无效的Suspended,并Revoked设置.理想情况下,我希望Restored在内部使用的枚举中存在一个值,但只能通过某些有效组合公开设置.不幸的是,internal它不是枚举值的有效修饰符.
我想过几个选择,但每个似乎都有缺点:
保留Restored作为公共值,请注意注释中的限制,并对公共API上的无效组合进行前置条件检查. …
我有一个脚本,可以使用几十个参数/标志Getopt::Long.某些标志不允许混合,例如:--linux --unix不允许一起提供.现在我知道我可以使用if声明检查,但我确信有更清洁,更好的方法.
if 如果我不想允许许多标志组合,块可能会变得丑陋.
有什么建议?
谢谢,
我只是想将我的代码从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中这样做.
谢谢.
我正在模拟6502处理器,我差不多完成了(现在处于测试阶段)并且我正在使用来自nesdev站点的一些NES测试,它告诉我中断标志和未使用的第5个标志都是最初应该设置为1(即禁用中断),但为什么呢?我可以理解未使用的标志部分,因为它......很好......未使用,但我不明白中断标志.我试过在Google上搜索,有些网站确认它应该设置为1,但没有人解释这背后的原因.为什么中断应该从程序开始被阻止?
假设我有一面旗帜public static final boolean FLAG.在开发中,我希望它是true,但在生产中,我希望它是false.
我是否应该true在开发过程中将其设置为,并且当我们构建/发布时,有人会进入并将其更改为false?
我有一种感觉,因为它看起来很糟糕,所以不是这样的.
我应该采取什么方法?
我目前有一些粗略的谷歌代码..这有效,但我想换成枚举.
目前我需要一个字节来表示一些设置的位标志,
我目前有这个:
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) 在反汇编中,我经常看到正在使用字符串操作指令而不考虑方向标志(DF)的状态,如下所示:
or ecx, 0FFFFFFFFh
xor eax, eax
mov edi, ebp
repne scasb
Run Code Online (Sandbox Code Playgroud)
CLD或者STD在函数开始后没有找到指令,也没有其他可能影响DF标志的指令.
那么,编译器在程序启动后,假定程序运行时,假定程序运行时保持预定义状态,并且在程序运行时保持不变?
添加 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 捕获。一旦我在此处就正确的解决方案达成共识,我就会将其归档)
我正在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会保留多少内存?