28

リフレクションを使用して、列挙型に Flags 属性があるかどうかを判断するにはどうすればよいですか

MyColor の場合は true を返します

[Flags]
public enum MyColor
{
    Yellow = 1,
    Green = 2,
    Red = 4,
    Blue = 8
}

MyTrade の場合は false を返します

public enum MyTrade
{
    Stock = 1,
    Floor = 2,
    Net = 4,
}
4

3 に答える 3

30
if (typeof(MyEnum).GetCustomAttributes(typeof(FlagsAttribute), false).Length > 0)
于 2013-01-22T14:58:12.523 に答える
28

.NET 4.5 を使用している場合:

if (typeof(MyColor).GetCustomAttributes<FlagsAttribute>().Any())
{
}
于 2013-01-22T15:03:37.840 に答える
22

属性データを調べずに、属性が存在するかどうかを確認するだけの場合は、 を使用する必要がありますMemberInfo.IsDefinedbool属性のコレクションを処理する代わりに、「指定された型またはその派生型の 1 つ以上の属性がこのメンバーに適用されるかどうか」を示す を返します。

typeof(MyColor).IsDefined(typeof(FlagsAttribute), inherit: false); // true
typeof(MyTrade).IsDefined(typeof(FlagsAttribute), inherit: false); // false

または、.NET 4.5 以降を使用している場合:

using System.Reflection;

typeof(MyColor).IsDefined<FlagsAttribute>(inherit: false); // true
typeof(MyTrade).IsDefined<FlagsAttribute>(inherit: false); // false
于 2015-10-13T07:56:25.030 に答える