Ответ 1
Если вы используете .NET 4.5:
if (typeof(MyColor).GetCustomAttributes<FlagsAttribute>().Any())
{
}
Используя отражение, как определить, имеет ли enum атрибут 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,
}
Если вы используете .NET 4.5:
if (typeof(MyColor).GetCustomAttributes<FlagsAttribute>().Any())
{
}
if (typeof(MyEnum).GetCustomAttributes(typeof(FlagsAttribute), false).Length > 0)
Если вы просто хотите проверить, присутствует ли атрибут, не проверяя данные атрибута, вы должны использовать 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