c# – 如何将枚举与标志组合?

c# – 如何将枚举与标志组合?,第1张

概述我有一个带标志枚举.我想声明一个带有n个不同标志的变量. n>在这种情况下为1. public enum BiomeType { Warm = 1, Hot = 2, Cold = 4, Intermediate = 8, Dry = 16, Moist = 32, Wet = 64,} 好的 – 一个变体是将每个标志转换为一个字节并将 我有一个带标志的枚举.我想声明一个带有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属性标记枚举以指示:

[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,这使得使用枚举变得更加困难.

总结

以上是内存溢出为你收集整理的c# – 如何将枚举与标志组合?全部内容,希望文章能够帮你解决c# – 如何将枚举与标志组合?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存