找出枚举是否设置了“标志”属性

时间:2013-01-22 14:56:52

标签: c# reflection enums

使用反射,如何确定枚举是否具有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,
}

3 个答案:

答案 0 :(得分:28)

if (typeof(MyEnum).GetCustomAttributes(typeof(FlagsAttribute), false).Length > 0)

答案 1 :(得分:24)

如果您使用的是.NET 4.5:

if (typeof(MyColor).GetCustomAttributes<FlagsAttribute>().Any())
{
}

答案 2 :(得分:12)

如果您只想检查某个属性是否存在,而不检查任何属性数据,则应使用MemberInfo.IsDefined。它返回一个bool,表示&#34;指定类型或其派生类型的一个或多个属性是否应用于该成员&#34;而不是处理属性集合。

实施例

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