0

我正在考虑为我的权限类型创建一个枚举,而不是将它们全部存储为 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 变量在通过 VS 调试器查看时仅显示“编辑”的值。起初我认为它没有存储两个值。

我使用了 hasFlag 方法,果然它知道这两个值。

那么它是一个错误还是什么?

4

2 回答 2

5

AddEdit== Edit == 1. 所以调试器不知道你是想把 1 转换成“Edit”还是“AddEdit”。

很可能你想要

[Flags] 
public enum Test 
{ 
    None = 0,
    Add = 1, 
    Edit = 2, 
    Delete = 4, 
    AddEdit = Add | Edit 
} 
于 2012-09-23T00:43:44.717 回答
3

MSDN提到枚举中的所有值都[Flags]应该是 2 的幂(即1,2,4,8.....)。

如果您有'None'枚举,则可以分配 0。

检查[Flags]文档中标题为“ FlagsAttribute 和 Enum 指南”的部分。

当您将一个值与零 ( 0) 进行或运算时,结果将再次是相同的值。因此,在您的情况下, ' AddEdit' 将导致 '1' 代表 ' ' 枚举Edit中的 ' '。Test

于 2012-09-23T01:10:13.920 回答