#c# #enums
#c# #перечисления
Вопрос:
Я пишу 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
, я не могу явно проверить каждый из них, поэтому я надеялся на более общий способ достижения этой цели.
Комментарии:
1. Когда вы говорите «определите, является ли ObjectType перечисляемым», вы в основном хотите проверить, является ли ObjectType «MyEnum», а не просто любым другим перечислением. Это правильно?
2. Нет, я хочу проверить, является ли это любым перечислением. ответ @minitech — это то, что я ищу.
Ответ №1:
Используйте IsEnum
свойство:
if(objectType.IsEnum) {
return true;
}
Комментарии:
1. или просто
return objectType.IsEnum
2. @AndrewWhitaker: Я понял, что, поскольку метод вызывается
CanConvert
, он будет проверять наличие нескольких различных возможных преобразований, а не только то, является ли этоenum
. В противном случае вы можете просто использоватьIsEnum
само свойство.3. @BryanMigliorisi: Всегда пожалуйста 🙂 Обязательно всегда просматривайте IntelliSense, я многому из него научился.
4. @SergeyMetlov в PCL вы можете использовать ObjectType. GetTypeInfo(). IsEnum
5. как насчет того, если (MyObject является перечисляемым)
Ответ №2:
Тип.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;
}
}