2012-09-23 5 views
0

Je pense à faire une énumération pour mes types d'autorisations au lieu de les stocker toutes comme valeurs vraies ou fausses dans db.Débogueur VS 2010 ayant des problèmes avec enums?

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 
    } 

J'ai donc fait cela. La chose amusante que j'ai trouvée est que addEdit varaible montre seulement la valeur de "Edit" quand on le regarde à travers le débogueur VS. Au début, je pensais qu'il ne stockait pas les deux valeurs.

J'ai utilisé la méthode hasFlag et je suis sûr qu'elle connaît les deux valeurs.

Est-ce un bug ou quoi?

Répondre

3

MSDN mentionne que toutes les valeurs des énumérations avec [Flags] doivent être des puissances de 2 (à savoir 1,2,4,8.....). Vous pouvez attribuer 0 si vous avez une énumération 'None'.

Vérifiez la section intitulée «Directives pour FlagsAttribute et Enum» dans la documentation [Flags].

Lorsque vous ou une valeur avec zéro (0), le résultat sera à nouveau la même valeur. Donc, dans votre cas, 'AddEdit' donnera '1' qui représente 'Edit' dans l'énumération 'Test'.

5

AddEdit== Edit == 1. Donc le débogueur ne sait pas si vous voulez convertir 1 en "Edit" ou "AddEdit".

Très probablement, vous voulez

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