0

パーミッション タイプをすべて 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
    }

だから私はこれを作りました。私が見つけた面白いことは、VS デバッガーで見ると、addEdit 変数が「編集」の値のみを表示することです。最初は、両方の値を保存していないと思いました。

私は 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) で OR すると、結果は再び同じ値になります。したがって、あなたの場合、' 'は ' ' 列挙型のAddEdit' ' を表す '1' になります。EditTest

于 2012-09-23T01:10:13.920 に答える