枚举成员列表与按位
List of enum members vs bitwise
当我有枚举类型时:
Public Enum EnumerationType
EnumerationMember1
EnumerationMember2
EnumerationMember3
EnumerationMember4
End Enum
并且我希望能够同时select超过一名成员,
是给每个赋值 2 的幂并使用按位比较还是使用列表更好?
您确实可以为值分配 2 的幂。与 flag attribute 结合,它给出了很好的结果。
特别是当您想使用 toString
打印它时。它是 C#,但你有很好的信息 here。
power of 2 解决方案确实是 C/C++ 导向的,在与用此类语言编写的库兼容时非常有用。它还提供了一种对数据库更友好的内存高效格式。
如果您想使用集合,请改用 List will have double entries issues, you will prefer to use a HashSet。它将为您提供在 combined 枚举中添加、删除或查找标签的便利,而无需使用魔法布尔运算。
您还应该问问自己:组合枚举对我来说有意义吗?
<FlagsAttribute>
Public Enum FileOption
Readable = 1
Writable = 2
End Enum
在这种情况下,MyFileOption.Readable Or MyFileOption.Writable
是有道理的。我的文件是可读可写的。
在我的一个应用程序中,我控制了一个可以向 PC 发送数据流的硬件,我可以选择要发送哪些流。
Public Enum HardwareStreams
StreamA
StreamB
Aux1
Aux2
End Enum
在这种情况下 HardwareStreams.StreamA Or HardwareStreams.Aux1
将不表示硬件流。但是一组这样的枚举是有意义的。
最后还是要看你枚举的用途,由你决定。
当我有枚举类型时:
Public Enum EnumerationType
EnumerationMember1
EnumerationMember2
EnumerationMember3
EnumerationMember4
End Enum
并且我希望能够同时select超过一名成员,
是给每个赋值 2 的幂并使用按位比较还是使用列表更好?
您确实可以为值分配 2 的幂。与 flag attribute 结合,它给出了很好的结果。
特别是当您想使用 toString
打印它时。它是 C#,但你有很好的信息 here。
power of 2 解决方案确实是 C/C++ 导向的,在与用此类语言编写的库兼容时非常有用。它还提供了一种对数据库更友好的内存高效格式。
如果您想使用集合,请改用 List will have double entries issues, you will prefer to use a HashSet。它将为您提供在 combined 枚举中添加、删除或查找标签的便利,而无需使用魔法布尔运算。
您还应该问问自己:组合枚举对我来说有意义吗?
<FlagsAttribute>
Public Enum FileOption
Readable = 1
Writable = 2
End Enum
在这种情况下,MyFileOption.Readable Or MyFileOption.Writable
是有道理的。我的文件是可读可写的。
在我的一个应用程序中,我控制了一个可以向 PC 发送数据流的硬件,我可以选择要发送哪些流。
Public Enum HardwareStreams
StreamA
StreamB
Aux1
Aux2
End Enum
在这种情况下 HardwareStreams.StreamA Or HardwareStreams.Aux1
将不表示硬件流。但是一组这样的枚举是有意义的。
最后还是要看你枚举的用途,由你决定。