Belirli bir Türün Enum olup olmadığını kontrol edin


117

Json.NET için bir JsonConverter yazıyorum, bu herhangi bir numaralandırmayı [Tanım] özniteliğiyle tanımlanan bir dize değerine dönüştürmeme izin vermelidir.

Örneğin:

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

myEnum.Description()Açıkça dize açıklamasını döndürecek olan destekleme koduna zaten sahibim .

JsonConverter uygulamasında şu yöntem vardır:

    public override bool CanConvert(Type objectType)
    {

    }

Dönüştürücünün bu nesneyi dönüştürebileceğini bilmesi için objectTypebir Enumolup olmadığını ve doğru olup olmadığını nasıl belirleyeceğimi anlamaya çalışıyorum . Pek çok Enumörneğim olduğundan, her birini açıkça kontrol edemiyorum, bu yüzden bunu başarmanın daha genel bir yolunu umuyordum.


"ObjectType'ın bir Enum olup olmadığını belirle" dediğinizde, temelde diğer herhangi bir numaralandırma yerine objectType'ın "MyEnum" olup olmadığını kontrol etmek istersiniz. Bu doğru mu?
Pawan Mishra

Hayır, herhangi bir Enum olup olmadığını kontrol etmek istiyorum. @ minitech'in cevabı aradığım şey.
Bryan Migliorisi

Yanıtlar:


234

IsEnumMülkü kullanın :

if(objectType.IsEnum) {
    return true;
}

62
ya da sadecereturn objectType.IsEnum
Andrew Whitaker

7
@AndrewWhitaker: Yöntem çağrıldığından beri CanConvertbirden fazla farklı olası dönüşümü kontrol edeceğini düşündüm, sadece bir enum. Aksi takdirde, sadece IsEnummülkün kendisini de kullanabilirsiniz .
Ry-

5
@BryanMigliorisi: Çok hoş geldiniz :) IntelliSense'e her zaman göz attığınızdan emin olun, bundan çok şey öğrendim.
Ry-

9
@SergeyMetlov, PCL'de objectType.GetTypeInfo () kullanabilirsiniz. IsEnum
Alexander Müller

(myObject
Enum'dur


1

[Açıklama] 'ya çok fazla odaklanarak soruyu tamamen yanlış yorumladım, bu nedenle, belirli bir numaralamanın [açıklama] özniteliğine sahip olup olmadığını kontrol etmek istemeniz durumunda (json, hiçbiri olmadığında bir uyum atarsa), bu bunu kontrol etmenin olası bir yolu:

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;
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.