Controlla se un determinato Tipo è un Enum


117

Sto scrivendo un JsonConverter per Json.NET che dovrebbe consentirmi di convertire qualsiasi enum in un valore stringa definito da un attributo [Description].

Per esempio:

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

Ho già il codice per il supporto myEnum.Description()che ovviamente restituirà la sua descrizione della stringa.

Nell'implementazione di JsonConverter, c'è questo metodo:

    public override bool CanConvert(Type objectType)
    {

    }

Sto cercando di capire come determinare se objectTypeè an Enume restituire true in modo che il convertitore sappia che può convertire questo oggetto. Dato che ne ho molti Enum, non posso controllarli esplicitamente ciascuno, quindi speravo in un modo più generico per farlo.


Quando dici "determina se objectType è un Enum", in pratica vuoi controllare se objectType è "MyEnum", piuttosto che qualsiasi altro enum. È corretto?
Pawan Mishra

No, voglio controllare se si tratta di Enum. La risposta di @ minitech è quello che sto cercando.
Bryan Migliorisi

Risposte:


234

Usa la IsEnumproprietà:

if(objectType.IsEnum) {
    return true;
}

62
o semplicementereturn objectType.IsEnum
Andrew Whitaker

7
@AndrewWhitaker: ho pensato che poiché il metodo è stato chiamato CanConvert, controllerà più conversioni possibili diverse, non solo se si tratta di un file enum. Altrimenti puoi anche usare la IsEnumproprietà stessa.
Ry-

5
@BryanMigliorisi: sei il benvenuto :) Assicurati di navigare sempre in IntelliSense, ho imparato molto da esso.
Ry-

9
@SergeyMetlov in PCL puoi usare objectType.GetTypeInfo (). IsEnum
Alexander Müller

che ne dici se (myObject è Enum)
Nick Kovalsky


1

Ho completamente interpretato erroneamente la domanda concentrandomi troppo sulla [Descrizione], quindi nel caso in cui desideri verificare se una particolare enumerazione ha un attributo [descrizione] o meno (nel caso in cui json generi un adattamento quando non ce n'è), questo è un modo possibile per verificarlo:

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;
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.