質問[Flags] Enum 属性は C# で何を意味しますか? 私が何を求めているのか尋ねず、それに答えません。その質問にそのような答えがある場合は、無意識に誤って重複としてフラグを立てるのではなく、コメントにどれ(リンク)かを記載してください。
MSDN のHasFlagドキュメントに次のメモがあります。
HasFlag メソッドは、FlagsAttribute 属性でマークされた列挙型で使用するように設計されており、複数のビット フィールドが設定されているかどうかを判断するために使用できます。FlagsAttribute 属性でマークされていない列挙型の場合は、Equals メソッドまたは CompareTo メソッドを呼び出します。
しかし、私はそれをテストしましたが、列挙型がFlagsAttributeでマークされているかどうかにかかわらず、メソッドは正常に機能しました。
たぶん、ドキュメントのメモは、属性を使用してある種の*良い慣行*を強制する試みにすぎません(そして、それは最終的にはまったく問題ではありません)?
私はここをのぞき見しましたが、実際には、列挙型にはまったく制限がないようです (単純なビットごとの AND です):
public Boolean HasFlag(Enum flag) {
if (!this.GetType().IsEquivalentTo(flag.GetType())) {
throw new ArgumentException(Environment.GetResourceString("Argument_EnumTypeDoesNotMatch", flag.GetType(), this.GetType()));
}
ulong uFlag = ToUInt64(flag.GetValue());
ulong uThis = ToUInt64(GetValue());
return ((uThis & uFlag) == uFlag);
}