c# – 如何将枚举与标志组合?
发布时间:2020-12-15 18:15:34 所属栏目:百科 来源:网络整理
导读:我有一个带标志的枚举.我想声明一个带有n个不同标志的变量. n在这种情况下为1. public enum BiomeType { Warm = 1,Hot = 2,Cold = 4,Intermediate = 8,Dry = 16,Moist = 32,Wet = 64,} 好的 – 一个变体是将每个标志转换为一个字节并将结果转换为我的枚举. B
我有一个带标志的枚举.我想声明一个带有n个不同标志的变量. n>在这种情况下为1.
public enum BiomeType { Warm = 1,Hot = 2,Cold = 4,Intermediate = 8,Dry = 16,Moist = 32,Wet = 64,} 好的 – 一个变体是将每个标志转换为一个字节并将结果转换为我的枚举. BiomeType bType = (BiomeType)((byte)BiomeType.Hot + (byte)BiomeType.Dry) 但这有点混乱 – imho.是否有更可读的方式来组合标志? 解决方法
简单,使用
binary “or” operator:
BiomeType bType = BiomeType.Hot | BiomeType.Dry; 此外,如果值可以像这样组合,最好使用 [Flags] public enum BiomeType { Warm = 1,} 由于多种原因,添加枚举值很糟糕.它可以很容易地生成超出定义值的值,即: BiomeType bType = (BiomeType)((byte)BiomeType.Wet + (byte)BiomeType.Wet); 设计时,此示例产生的值为128,不会映射到已知值.这仍然可以编译和运行,但是您可能没有构建代码来处理那些定义之外的值,并可能导致未定义的行为.但是,如果您使用管道(或“二进制或”)运算符: BiomeType bType = BiomeType.Wet | BiomeType.Wet; 结果仍然只是BiomeType.Wet. 此外,在您的问题中使用添加不会在IDE中提供Intellisense,这使得使用枚举变得更加困难. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |