C# 查找枚举是否具有;旗帜;属性集

C# 查找枚举是否具有;旗帜;属性集,c#,reflection,enums,C#,Reflection,Enums,使用反射,如何确定枚举是否具有Flags属性 因此,对于MyColor,返回true [Flags] public enum MyColor { Yellow = 1, Green = 2, Red = 4, Blue = 8 } 我的交易申报表是假的 public enum MyTrade { Stock = 1, Floor = 2, Net = 4, } 如果您使用的是.NET 4.5: if (typeof(MyColor).G

使用反射,如何确定枚举是否具有Flags属性

因此,对于MyColor,返回true

[Flags]
public enum MyColor
{
    Yellow = 1,
    Green = 2,
    Red = 4,
    Blue = 8
}
我的交易申报表是假的

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

如果您使用的是.NET 4.5:

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

如果只想检查属性是否存在,而不检查任何属性数据,则应使用。它返回一个
bool
,指示“指定类型或其派生类型的一个或多个属性是否应用于此成员”,而不是处理属性集合

例子
typeof(MyColor).IsDefined(typeof(FlagsAttribute),inherit:false);//真的
typeof(MyTrade).IsDefined(typeof(FlagsAttribute),inherit:false);//假的
或者,如果您使用的是.NET 4.5+:

使用系统反射;
typeof(MyColor).IsDefined(inherit:false);//真的
typeof(MyTrade).IsDefined(inherit:false);//假的

@ErenErsönmez:这是.NET4.5的新扩展方法。需要使用System.Reflection添加
访问扩展。有点晚了,但我相信
typeof(MyColor).IsDefined(typeof(FlagsAttribute),false)
就是为了这个。避免处理收集。@C.Evenhuis-这个答案绝对是最好的。即使性能影响接近于零,我们也不想真正分析一个集合。所以我们不这样做。@C.Evenhuis这正是我下面的答案;)我在文档中找不到已定义的
的通用版本。那是从哪里来的?
if (typeof(MyColor).GetCustomAttributes<FlagsAttribute>().Any())
{
}