Vérifier si un type donné est une énumération

117

J'écris un JsonConverter pour Json.NET qui devrait me permettre de convertir n'importe quelle énumération 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 le support myEnum.Description()qui renverra évidemment sa chaîne de description.

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

    public override bool CanConvert(Type objectType)
    {

    }

J'essaie de comprendre comment déterminer si objectTypeest un Enumet retourner vrai afin que le convertisseur sache qu'il peut convertir cet objet. Comme j'en ai beaucoup Enum, je ne peux pas les vérifier explicitement, donc j'espérais une manière plus générique d'accomplir cela.

Bryan Migliorisi
la source
Lorsque vous dites "déterminer si objectType est un Enum", vous voulez essentiellement vérifier si le objectType est "MyEnum", plutôt que n'importe quelle autre énumération. Est-ce exact?
Pawan Mishra
Non, je veux vérifier s'il s'agit d'un Enum. La réponse de @ minitech est ce que je recherche.
Bryan Migliorisi

Réponses:

234

Utilisez la IsEnumpropriété:

if(objectType.IsEnum) {
    return true;
}
Ry-
la source
62
ou tout simplementreturn objectType.IsEnum
Andrew Whitaker
7
@AndrewWhitaker: J'ai pensé que puisque la méthode est appelée CanConvert, elle vérifiera plusieurs conversions possibles, pas seulement s'il s'agit d'un fichier enum. Sinon, vous pouvez tout aussi bien utiliser la IsEnumpropriété elle-même.
Ry-
5
@BryanMigliorisi: De rien :) Assurez-vous de toujours parcourir IntelliSense, j'en ai beaucoup appris.
Ry-
9
@SergeyMetlov en PCL, vous pouvez utiliser objectType.GetTypeInfo (). IsEnum
Alexander Müller
how bout if (myObject is Enum)
Nick Kovalsky
19

Type.IsEnum est ce que vous recherchez

parapura rajkumar
la source
1

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 (au cas où json lèverait un ajustement alors qu'il n'y en avait pas), c'est une façon 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;
    }
}
À M
la source