当前位置:  开发笔记 > 编程语言 > 正文

在枚举中有意义的最大标志数是多少?

如何解决《在枚举中有意义的最大标志数是多少?》经验,为你挑选了1个好方法。

考虑这种类型的枚举,您可以使用按位比较基本上将多个布尔值组合到一个数据字段中:

[Flags]
public enum Options 
{
    None    = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8
}

我已阅读MSDN文档,网址为https://msdn.microsoft.com/en-us/library/ms229062(v=vs.100).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet -1并完成了一些谷歌搜索,但我仍然有一些架构问题.

似乎最多[EDIT:8]选项(加上"none"),您可以将任何标志组合放入单个存储字节中.这实际上是它在运行时是如何处理的,还是只是陷入了Int32而浪费了剩余的空间?添加第九个选项是否存在效率劣势?如果是这样,在达到下一个效率劣势之前,您还可以添加多少选项?关于其中一个应该有多大,是否有经验法则?我正在考虑将这个用于需要至少6个标志的应用程序,但可以想象它会增加到8-12个标志(但我也对理论限制感兴趣.)

提前致谢!



1> Scott Chambe..:

默认情况下,任何枚举都由a支持int,这意味着它有32位.这可以容纳多达32个不同的标志,因为每个标志只是设置了一点int.

当你有少于32个标志时,它仍占用一个int4字节的空间.你被允许选择其他类型是从列表中的基本类型byte,sbyte,short,ushort,int,uint,long,或ulong.

因此,如果您只有4个选项,则可以将枚举声明为

[Flags]
public enum Options : byte
{
    None    = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8
}

然后它只占用一个字节的内存,你可以在用完之前添加多达8个选项.

至于设计最佳实践,只需阅读Microsoft在Enums上的最佳实践页面

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有