2012-09-23 2 views
0

나는 db에 true 또는 false 값을 모두 저장하는 대신 내 사용 권한 유형에 대한 열거 형을 만들려고합니다.VS 2010 디버거에서 열거 형에 문제가 있습니까?

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 메서드를 사용했고 두 값에 대해 충분히 알고 있는지 확인했습니다.

그래서 버그입니까?

답변

3

MSDN[Flags]에 열거 모든 값이의 힘으로해야한다고 언급 대부분의 경우 원하는 2 (즉 1,2,4,8.....).

'None' 열거 형이면 0을 할당 할 수 있습니다.

"FlagsAttribute에 대한 지침 및 열거"([Flags] 문서) 섹션을 확인하십시오.

값이 0 인 경우 (0) 결과가 다시 같은 값이됩니다. 따라서 귀하의 경우 'AddEdit'은 'Test'열거 형에 'Edit'을 나타내는 '1'이됩니다.

5

AddEdit== Edit == 1. 따라서 디버거는 1을 "편집"또는 "AddEdit"로 변환 할 것인지 여부를 모릅니다.

당신은

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