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.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
于 2015-10-13T07:56:25.030 回答