我正在考虑为我的权限类型创建一个枚举,而不是将它们全部存储为 true 或 false 值存储在 db 中。
class Program
{
static void Main(string[] args)
{
Test addEdit = Test.AddEdit;
bool hasEdit = addEdit.HasFlag(Test.Edit);
bool hasAdd = addEdit.HasFlag(Test.Add);
bool hasDelete = addEdit.HasFlag(Test.Delete);
Console.WriteLine(hasEdit);
Console.WriteLine(hasAdd);
Console.WriteLine(hasDelete);
Console.Read();
}
}
[Flags]
public enum Test
{
Add = 0,
Edit = 1,
Delete = 2,
AddEdit = Add | Edit
}
所以我做了这个。我发现的有趣的是,addEdit varaible 在通过 VS 调试器查看时仅显示"编辑"的值。起初我以为它没有存储这两个值。
我使用了hasFlag方法,果然它知道这两个值。
那么这是一个错误还是什么?
AddEdit== Edit == 1
.所以调试器不知道你是要将 1 转换为"编辑"还是"添加编辑"。
最有可能你想要
[Flags]
public enum Test
{
None = 0,
Add = 1,
Edit = 2,
Delete = 4,
AddEdit = Add | Edit
}
MSDN 提到带有 [Flags]
的枚举中的所有值都应该是 2 的幂(即 1,2,4,8.....
)。
如果您有 'None'
枚举,则可以分配 0。
查看 [标志] 文档中标题为"标志属性和枚举指南"的部分。
当您 OR 值为零 ( 0
时,结果将再次为相同的值。因此,在您的情况下,"AddEdit
"将导致"1",它表示"Test
"枚举中的"Edit
"。