VS 2010 调试器枚举出现问题



我正在考虑为我的权限类型创建一个枚举,而不是将它们全部存储为 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"。

最新更新