作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个枚举来表示两种状态,我想创建组合。今天早上读了一些书后,我发现了 flags 属性。我知道如果你每次都增加 2 的幂,那么二进制值只设置了一位,所以组合是可能的。
<Flags()> _
Public Enum TaskStatus
Incomplete = 1
Complete = 2
End Enum
1 = 0000001
2 = 0000010
所以 1+2 的组合将是 0000011
然后我想构建一个数据库参数来指示选择了哪些状态(如果有的话)。最好的方法是什么?我猜我不能只将二进制文件发送到我的 sp,但我不确定。
我也不明白如果枚举中的值超过 7 个,标志将如何工作?
最佳答案
为什么有 7 个值?标准整数的长度为 32 位。您可以对 64 位使用 long。如果它是 64 位应用程序,您可以有 128 位长。如果您不关心数据库内部的可读性,则没有理由不能将值作为 int 或 bigint 存储在数据库中。
此外,如果您用 HEX 表示您的值,将更容易保持 2 的幂:
Value1 = 0x1
Value2 = 0x2
Value3 = 0x4
Value4 = 0x8
Value5 = 0x10
Value6 = 0x20
要将每个值单独插入到数据库中,您将为数据库中的每个标志创建一个整数字段,然后在插入时执行以下操作:
flag1 = (int)flagEnumValue & (int) flagEnum.Value1
flag2 = (int)flagEnumValue & (int) flagEnum.Value2
这是一个按位与,你可以阅读关于 here 的内容
关于.net - 挣扎于枚举标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863220/
我是一名优秀的程序员,十分优秀!