以下に示すように、FlagsAttributeを適用して列挙型を評価しようとしています。問題は、適切なifステートメントが実行されることを保証するために取るとんでもない量のコードです。列挙型の特定の組み合わせが設定されている場合にのみ実行する必要がある4つのifステートメントがありますが、それ以外はありません。
- プライベート、静的
- プライベート
- 特権
- 公衆
必要なフラグの存在を検出するのは簡単ですが、他のフラグが設定されていないことも確認する必要があります。これは、入力するコードの量がばかげており、メンテナンスの悪夢のように見えます。
[Flags]
public enum AccessModifierType : short
{
Infer = 1,
Public = 2,
Privileged = 4,
Private = 8,
Static = 16
}
誰かがこれをもっと簡潔にするためにifステートメントを書き直すことができますか?
if ((Model.CurrentContext.CurrentAccessModifierType & AccessModifierType.Public) == AccessModifierType.Public
&& (Model.CurrentContext.CurrentAccessModifierType & AccessModifierType.Static) != AccessModifierType.Static
&& (Model.CurrentContext.CurrentAccessModifierType & AccessModifierType.Privileged) != AccessModifierType.Privileged
&& (Model.CurrentContext.CurrentAccessModifierType & AccessModifierType.Private) != AccessModifierType.Private){
}