挣扎着枚举标志

时间:2014-04-04 12:45:20

标签: .net vb.net enums flags

我有一个代表两个州的枚举,我想创建组合。今天早上做了一些阅读后,我遇到了flags属性。我知道如果你每次上升2的幂,那么二进制值只有一个位设置,所以组合是可能的。

<Flags()> _
Public Enum TaskStatus
    Incomplete = 1
    Complete = 2
End Enum

1 = 0000001    
2 = 0000010

所以1 + 2的组合将是0000011

然后我想构建一个数据库参数,以指示选择了哪些状态(如果有的话)。最好的方法是什么?我猜我不能把二进制文件发送到我的sp,但我不确定。

如果枚举中的值超过7,我也不明白标志会如何工作?

1 个答案:

答案 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