जांचें कि क्या दिया गया प्रकार एक एनम है


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)
    {

    }

मैं यह पता लगाने की अगर निर्धारित करने के लिए कोशिश कर रहा हूँ कैसे objectTypeहै एक Enumऔर सच तो कनवर्टर जानता है कि यह इस वस्तु में बदल सकते हैं वापसी। चूंकि मेरे पास कई हैं Enum, इसलिए मैं स्पष्ट रूप से हर एक की जांच नहीं कर सकता, इसलिए मैं इसे पूरा करने के अधिक सामान्य तरीके की उम्मीद कर रहा था।


जब आप कहते हैं कि "निर्धारित करें कि ऑब्जेक्टटाइप एक एनम है", तो आप मूल रूप से यह जांचना चाहते हैं कि ऑब्जेक्टटाइप "माईन्यूम" है, बजाय किसी अन्य एनम के। क्या वो सही है?
पवन मिश्रा

नहीं, मैं जांच करना चाहता हूं कि क्या यह कोई एनम है। @ मिनिटेक का जवाब है कि मैं क्या देख रहा हूं।
ब्रायन मिगलोरिसी

जवाबों:


234

IsEnumसंपत्ति का उपयोग करें :

if(objectType.IsEnum) {
    return true;
}

62
या अभीreturn objectType.IsEnum
एंड्रयू व्हिटकर

7
@AndrewWhitaker: मुझे लगा कि जब से इस विधि को कहा जाता है CanConvert, यह कई अलग-अलग संभावित रूपांतरणों की जाँच करेगा, न कि यदि यह एक है enum। अन्यथा आप केवल IsEnumसंपत्ति का ही उपयोग कर सकते हैं।
Ry-

5
@BryanMigliorisi: आपका बहुत बहुत स्वागत है :) हमेशा सुनिश्चित करें कि हमेशा IntelliSense ब्राउज़ करें, मैंने इससे बहुत कुछ सीखा है।
Ry-

9
PCL में @SergeyMetlov आप objectType.GetTypeInfo () का उपयोग कर सकते हैं। IsEnum
Alexander Müller

कैसे डटकर अगर (myObject Enum है)
Nick Kovalsky


1

मैंने [विवरण] पर बहुत अधिक ध्यान केंद्रित करके प्रश्न को पूरी तरह से गलत समझा है, इसलिए यदि आप कभी भी यह जांचना चाहते हैं कि किसी विशेष एनम में एक [विवरण] विशेषता है या नहीं (मामले में जब कोई नहीं है तो json फिट बैठता है), यह उसके लिए जाँच करने का एक संभावित तरीका:

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;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.