111 votes

Vérifier si un type donné est un enum

Je suis en train d'écrire un JsonConverter pour Json.NET ce qui devrait me permettre de convertir n'importe quel enum à une chaîne de valeur définie par un [Description] l'attribut.

Par exemple:

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

J'ai déjà le code pour appuyer myEnum.Description() qui sera bien évidemment le retour de sa chaîne de description.

Dans le JsonConverter mise en œuvre, il y a cette méthode:

    public override bool CanConvert(Type objectType)
    {

    }

Je suis à essayer de comprendre comment faire pour déterminer si objectType est Enum et retourner true pour que le convertisseur sait qu'il peut convertir cet objet. Depuis j'ai beaucoup d' Enums', je ne peux pas explicitement vérifier chacun afin que je m'attendais à une plus générique façon d'accomplir ceci.

223voto

minitech Points 87225

Utilisez la propriété IsEnum :

 if(objectType.IsEnum) {
    return true;
}
 

16voto

parapura rajkumar Points 16597

Type.IsEnum est ce que vous recherchez

1voto

Tom Points 374

J'ai complètement mal interprété la question en me concentrant trop sur la [Description], donc au cas où vous voudriez vérifier si une énumération particulière a un attribut [description] ou non (dans le cas où JSON fait un ajustement quand il n'y en a pas), c'est un moyen possible de vérifier cela:

 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;
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X