我有一个代表两个州的枚举,我想创建组合。今天早上做了一些阅读后,我遇到了flags属性。我知道如果你每次上升2的幂,那么二进制值只有一个位设置,所以组合是可能的。
<Flags()> _
Public Enum TaskStatus
Incomplete = 1
Complete = 2
End Enum
1 = 0000001
2 = 0000010
所以1 + 2的组合将是0000011
然后我想构建一个数据库参数,以指示选择了哪些状态(如果有的话)。最好的方法是什么?我猜我不能把二进制文件发送到我的sp,但我不确定。
如果枚举中的值超过7,我也不明白标志会如何工作?
答案 0 :(得分:2)
为什么要有7个值?标准整数是32位长。你可以使用长64位。如果它是一个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