发现如果枚举具有“标志”属性设置(Finding out if an enum has the “F

2019-07-18 12:55发布

使用反射,我该如何确定一个枚举是否具有标志属性或不

所以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,
}

Answer 1:

如果你是在.NET 4.5:

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


Answer 2:

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


Answer 3:

如果你只是想检查的属性存在,没有任何检查属性数据,你应该使用MemberInfo.IsDefined 。 它返回一个bool ,指示“指定的类型或由其派生的类型的一个或多个属性是否被施加到该构件”,而不是处理属性的集合。

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


文章来源: Finding out if an enum has the “Flags” attribute set