Periksa apakah Jenis yang diberikan adalah Enum


117

Saya menulis JsonConverter untuk Json.NET yang memungkinkan saya untuk mengubah enum apapun menjadi nilai string yang ditentukan oleh atribut [Description].

Sebagai contoh:

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

Saya sudah memiliki kode untuk mendukung myEnum.Description()yang jelas akan mengembalikan deskripsi stringnya.

Dalam implementasi JsonConverter, ada metode ini:

    public override bool CanConvert(Type objectType)
    {

    }

Saya mencoba mencari cara untuk menentukan apakah objectTypean Enumdan mengembalikan true sehingga konverter tahu itu dapat mengonversi objek ini. Karena saya punya banyak Enum, saya tidak bisa secara eksplisit memeriksa masing-masing jadi saya berharap cara yang lebih umum untuk mencapai ini.


Saat Anda mengatakan "tentukan apakah objectType adalah Enum", pada dasarnya Anda ingin memeriksa apakah objectType adalah "MyEnum", bukan sembarang enum lainnya. Apakah itu benar?
Pawan Mishra

Tidak, saya ingin memeriksa apakah itu Enum. Jawaban @ minitech adalah apa yang saya cari.
Bryan Migliorisi

Jawaban:


234

Gunakan IsEnumproperti:

if(objectType.IsEnum) {
    return true;
}

62
atau hanyareturn objectType.IsEnum
Andrew Whitaker

7
@AndrewWhitaker: Saya pikir karena metode ini dipanggil CanConvert, ia akan memeriksa beberapa kemungkinan konversi yang berbeda, tidak hanya jika itu sebuah enum. Jika tidak, Anda mungkin juga hanya menggunakanIsEnum properti itu sendiri.
Ry-

5
@BryanMigliorisi: Sama-sama :) Pastikan untuk selalu menelusuri IntelliSense, saya telah belajar banyak darinya.
Ry-

9
@SergeyMetlov di PCL Anda dapat menggunakan objectType.GetTypeInfo (). IsEnum
Alexander Müller

bagaimana jika (myObject adalah Enum)
Nick Kovalsky


1

Saya benar-benar salah menafsirkan pertanyaan dengan berfokus terlalu banyak pada [Description], jadi jika Anda ingin memeriksa apakah enum tertentu memiliki atribut [description] atau tidak (jika json memberikan kecocokan ketika tidak ada), ini adalah satu cara yang mungkin untuk memeriksanya:

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;
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.