Ответ 1
Используйте свойство IsEnum
:
if(objectType.IsEnum) {
return true;
}
Я пишу 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
, я не могу явно проверить каждый, поэтому я надеялся на более общий способ достижения этого.
Используйте свойство IsEnum
:
if(objectType.IsEnum) {
return true;
}
Type.IsEnum - это то, что вы ищете
Я полностью неверно истолковал вопрос, слишком сильно сосредоточившись на [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;
}
}