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

Проверьте, является ли данный тип Enum

Я пишу JsonConverter для Json.NET, который должен позволить мне преобразовать любое перечисление в строковое значение, определенное атрибутом [Description].

Например:

public enum MyEnum {
    [Description("Sunday")] Sunday,
    [Description("Monday")] Monday,
    [Description("Tuesday")] Tuesday,
    [Description("Wednesday")] Wednesday,
    [Description("Thursday")] Thursday,
    [Description("Friday")] Friday,
    [Description("Saturday")] Saturday
}

У меня уже есть код для поддержки myEnum.Description(), который, очевидно, вернет описание строки.

В реализации JsonConverter существует такой метод:

    public override bool CanConvert(Type objectType)
    {

    }

Я пытаюсь выяснить, как определить, является ли objectType Enum и возвращает true, чтобы конвертер знал, что он может преобразовать этот объект. Поскольку у меня много Enum, я не могу явно проверить каждый, поэтому я надеялся на более общий способ достижения этого.

4b9b3361

Ответ 1

Используйте свойство IsEnum:

if(objectType.IsEnum) {
    return true;
}

Ответ 2

Type.IsEnum - это то, что вы ищете

Ответ 3

Я полностью неверно истолковал вопрос, слишком сильно сосредоточившись на [Description], поэтому, если вы когда-нибудь захотите проверить, имеет ли конкретное перечисление атрибут [description] или нет (в случае, если json выбрасывает пригонку, когда его нет), это один из возможных способов проверить это:

public override bool CanConvert(Type objectType)
{
    FieldInfo[] fieldInfo = objectType.GetFields(BindingFlags.Public | BindingFlags.Static);

    if( fieldInfo.Length > 0 )
    {
        return ( fieldInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false).Length > 0 );
    }
    else
    {
        return false;
    }
}