Подтвердить что ты не робот

Выяснение, имеет ли перечисление атрибут "Флаги"

Используя отражение, как определить, имеет ли 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,
}
4b9b3361

Ответ 1

Если вы используете .NET 4.5:

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

Ответ 2

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

Ответ 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