web-dev-qa-db-fra.com

Vérifier si un type donné est un enum

J'écris un JsonConverter pour Json.NET qui devrait me permettre de convertir n'importe quel enum en une valeur de chaîne définie par un attribut [Description].

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 supporter myEnum.Description() qui retournera évidemment sa description de chaîne.

Dans l'implémentation JsonConverter, il existe cette méthode:

    public override bool CanConvert(Type objectType)
    {

    }

J'essaie de comprendre comment déterminer si objectType est un Enum et renvoyer true afin que le convertisseur sache qu'il peut convertir cet objet. Comme j'ai beaucoup de Enum, je ne peux pas vérifier explicitement chacun d'eux, alors j'espérais un moyen plus générique d'accomplir cela.

107
Bryan Migliorisi

Utilisez la propriété IsEnum :

if(objectType.IsEnum) {
    return true;
}
211
Ry-

Type.IsEnum est ce que vous recherchez

16

J'ai complètement mal interprété la question en me concentrant trop sur la [Description], donc si vous voulez vérifier si une énumération particulière a un attribut [description] ou non (dans le cas où JSON réagit alors qu'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;
    }
}
1
Tom