私がフラグと非フラグの両方でenumを必要としているとします。enumのフラグと非フラグのバリエーション
オプション1:
enum Color { Red, Blue, Green } [Flags] enum Colors { None = 0, Red = 1, Blue = 2, Green = 4 } // use cases Color currentColor; Colors supportedColors;
オプション2:私はすべてを複製することができ、私はちょうどすべてのためのフラグのバリアントを使用することができます。
Colors currentColor; // ugly, since neither "None" nor "Red | Blue" should be valid
私にはありません次のいずれかのように:オプション1では、Color.Red
とColors.Red
は完全に無関係です。拘束力のあるコード。さらに、私は2つの列挙を同期させておく必要があります。オプション2の欠点は明らかです。私が実際に気に入っているのは、次のようなものです
enum Colors = Flag set of Color;
この要件を満たすには、もっと優雅な解決策がありますか?
ユースケースを拡張できますか? 'supportedColors'と' currentColor'を比較する必要はありますか? – Oded
@Oded:はい、 'bool currentColorIsSupported =(currentColor And supportedColor <> 0)'のようなことをすることができれば嬉しいです。 – Heinzi