VS 2010调试器有枚举问题吗?

时间:2012-09-23 00:38:24

标签: c# visual-studio-2010 visual-studio enums

我正在考虑为我的权限类型创建一个枚举,而不是将它们全部存储为db中的true或false值。

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方法,当然它知道这两个值。

这是一个错误还是什么?

2 个答案:

答案 0 :(得分:5)

AddEdit== Edit == 1。因此,调试器不知道您是否要将1转换为“Edit”或“AddEdit”。

很可能你想要

[Flags] 
public enum Test 
{ 
    None = 0,
    Add = 1, 
    Edit = 2, 
    Delete = 4, 
    AddEdit = Add | Edit 
} 

答案 1 :(得分:3)

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

如果您有'None'枚举,则可以指定0。

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

当OR值为零(0)时,结果将再次为相同值。因此,在您的情况下,“AddEdit”将导致“1”代表“Edit”枚举中的“Test”。