0

だから私はこのコードに出くわしました:

[Flags]
public enum Options
{
    NA = 0,
    OptionA = 1,
    OptionB = 2,
    OptionC = 4
}

現在、技術的には「NA」は無効です。ユーザーがオプションを選択したくない場合は、オプションを選択せず​​、null許容整数に保存されます。「なし」オプションはありません。ただし、ユーザーがオプションACを選択すると、NAも常に追加されます。変更するNA = 1OptionC = 8、すべてがうまく機能します。その部分は理にかなっています。しかし、どうしてNAが常にユーザーのオプションリストに含まれるのNA = 0でしょうか。

編集:

いくつかのことを明確にするために、NAは排他的ですが、OptionBを選択する場所で、選択したオプションを表示すると、NAとOptionBを選択したことが表示されます。

4

2 に答える 2

3

Flags列挙型の属性として0の値を追加する場合、値をフィルターで除外するために使用すると、常にその値が含まれます。&

これは、必要なすべてのビット(この場合はなし)が常に設定されているためです。

于 2013-01-26T16:43:24.670 に答える
2

属性で列挙型を使用する場合は、他のすべてのオプション(たとえば、など)をFlags除外するオプションがある場合にのみ、値0を使用してください。None次に、次のコマンドでテストします。

if (myOptions == Options.Na)

テスト:

if ((myOptions & Options.Na) == Options.Na)

もちろん、常にtrueを返します。

名前Naは、他のすべてのオプションを除外していることを示しています。問題は何ですか?

于 2013-01-26T16:45:21.000 に答える