2

明示的にenumリストすることなくすべてのオプションを定義する簡単な方法が必要だったので、次の方法で宣言されたがあります(ただし、より多くのオプションがあります-約15程度)。

[Flags]
enum Options
{
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8,
    AllOptions = 15
}

だから言う代わりに

Options foo = Options.Option1 | Options.Option2 | Options.Option3 |... ad nauseum

私はただ言うことができます

Options foo = Options.AllOptions;

これは賢明ですか?または、明示的にリストする必要なしに、変数に使用可能なすべてのオプションを与えるためのより良い方法はありますか?

4

2 に答える 2

6

または、明示的にリストする必要なしに、変数に使用可能なすべてのオプションを与えるためのより良い方法はありますか?

さて、あなたは私の制約のないメロディープロジェクトを使うことができます:

Options allOptions = Flags.GetUsedBits<Options>();

(その後、制約なしメロディを使用して実行できる他のすべての種類の操作があります。)

個人的には、「all」値をハードコーディングすることは避けたいと思います。新しい値を追加して「all」値を更新するのを忘れるのは簡単です。

AllOptions(この場合、名前を付けることも避けます。All冗長性を避けるために、名前を付ける必要がありますOptions.AllOptions。)

実行する場合、単体テストを追加して、正しく実行されたことを確認してください:)

于 2012-11-06T19:27:33.050 に答える
4

あなたはこれを行うことができます:

[Flags]
enum Options
{
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8,
    AllOptions = Option1 | Option2 | Option3 | Option4
}

このアプローチは、文字通り、Option1とOption2、およびOption3とOption4を意味します。これは次のように使用できます。

Options.AllOptions;

また

Options.Option1 | Options.Option2 | Options.Option3 | Option.Option4

上記の両方が同じ結果になります。

于 2012-11-06T19:27:10.883 に答える