指定されたタイプが列挙型かどうかを確認します


117

列挙型を[説明]属性で定義された文字列値に変換できるJson.NETのJsonConverterを書いています。

例えば:

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()文字列の説明を明らかに返すサポート用のコードはすでにあります。

JsonConverter実装には、このメソッドがあります。

    public override bool CanConvert(Type objectType)
    {

    }

私はかどうかを判別する方法を把握しようとしていますobjectTypeEnum、コンバータが、それはこのオブジェクトを変換することができます知っていることは事実そうに返します。私は多くEnumのを持っているので、それぞれを明示的にチェックすることができないので、これを達成するためのより一般的な方法を望んでいました。


「objectTypeがEnumであるかどうかを判断する」と言った場合、基本的には、objectTypeが他の列挙型だけでなく、「MyEnum」であるかどうかを確認します。あれは正しいですか?
Pawan Mishra

いいえEnumかどうかを確認したいと思います。@minitechの答えは私が探しているものです。
ブライアン・ミリオーリシ

回答:


234

IsEnumプロパティを使用します。

if(objectType.IsEnum) {
    return true;
}

62
またはただreturn objectType.IsEnum
Andrew Whitaker

7
@AndrewWhitaker:メソッドが呼び出されたためCanConvert、それがである場合だけでなく、複数の異なる可能な変換があるかどうかをチェックすると思いましたenum。それ以外の場合は、IsEnumプロパティ自体を使用することもできます。
Ry-

5
@BryanMigliorisi:どういたしまして:) IntelliSenseを常に参照するようにしてください。私はそれから多くのことを学びました。
Ry-

9
PCLの@SergeyMetlovでは、objectType.GetTypeInfo()。IsEnumを使用できます
AlexanderMüllerDec

どのように試合(myObjectはEnum)
Nick Kovalsky


1

[説明]に注目しすぎて質問を完全に誤って解釈したので、特定の列挙型に[説明]属性があるかどうかを確認したい場合(jsonが存在しない場合にjsonがスローする場合)は、これを確認する1つの可能な方法:

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;
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.