.net - 挣扎于枚举标志

标签 .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 个,标志将如何工作?

最佳答案

为什么有 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/

相关文章:

c# - .NET 中的树集合

c# - 在 C# 中对列表进行排序

vb.net 无法将 Dictionary(Of String, List(Of String)) 转换为对象

c# - 如何使用 .NET 获取属性中的构造函数参数名称?

java - Java 枚举类型中的 get() 方法

c# - 如何将 Unicode 字符转换为其等效的 ASCII 字符

.net - 如何将 ContextMenuStrip 附加到 NotifyIcon

vb.net - txtExample.Clear() 与 txtExample.Text = String.Empty

ios - 具有关联值的枚举的数据模型

swift - 原始类型 'Bool' 不能用任何文字表达