c# - Can I extend Enum a la Enum.GetValues()? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 13 उत्तर

मैं एक एक्सटेंशन बनाना चाहता हूँ विधि जो किसी भी एनएएम को जेसन स्ट्रिंग में बदल देती है।

मैं एनोम के लिए एक एक्सटेंशन विधि संलग्न करने में सक्षम होना चाहूंगा कि मैं एक enum-type पास कर सकता हूं, ताकि इसे Enum जिस तरह से आप Enum.GetValues ​​(Type enumType) को कॉल कर सकते हैं, तो ऐसा लग सकता है:

  Enum.ToJsonString (प्रकार enumType )  

ऐसा लगता है कि यह संभव नहीं है - Enum एक सार वर्ग है; आप यह कैसे बढ़ा सकते हैं? - और यह कि मैं इसे लागू करने के लिए अपना स्वयं का स्थैतिक प्रकार बनाना पड़ेगा।

क्या कोई यह पुष्टि कर सकता है कि मैं इस तरह Enum का विस्तार नहीं कर सकता (और कृपया तकनीकी रूप से, क्यों, कृपया), या मुझे बताओ कैसे मैं कर सकता हूं?

स्पष्टीकरण (अपडेट)

मुझे पता है कि मैं इसे अपने स्वयं के स्थैतिक प्रकार से कर सकता हूँ उदाहरण के लिए, यह EnumExtensions.ToJsonString (Type enumType) बनाने के लिए काफी आसान होगा, लेकिन मुझे VS इंटेलीजेंस ऑटो-पूर्ण के साथ GetValues ​​() एट अल के साथ सूचीबद्ध विधि होना चाहिए।

जैसा कि सी # में परिभाषित किया गया है:

विस्तार विधियां आपको "जोड़" विधियों के लिए सक्षम करते हैं मौजूदा प्रकार एक नया व्युत्पन्न प्रकार, recompiling, या अन्यथा मूल प्रकार को संशोधित किए बिना। विस्तार विधियां एक विशेष प्रकार की स्थिर विधि हैं, लेकिन उन्हें बुलाया जाता है जैसे वे विस्तारित प्रकार के उदाहरण विधियां थे।

उन्हें बुलाया जाना चाहिए क्योंकि वे हैं प्रकार के उदाहरण विधि Enum एक प्रकार का नाम है, और आप एक्सटेंशन लिखने का प्रयास कर रहे हैं जो कि स्थिर सदस्य प्रकार की तरह दिखेगा, जो कि संभव नहीं है।

क्या आप सामान्य विधि है, जो मान के प्रकार को स्वीकार करने और एएनआईम मूल्यों को JSON में कनवर्ट करेगा:

  सार्वजनिक स्थिर स्ट्रिंग GetEnumJson & lt; T & gt; () जहां टी: struct {प्रकार प्रकार = प्रकारफ़ (टी) ; अगर (! Type.IsEnum) नया NotSupportedException फेंक (); Var सदस्य = Enum.GetNames (प्रकार) .ऑनोकेशन (एस = & gt; s, s = & gt; Enum.Parse (प्रकार, s)); वापसी JsonConvert.SerializeObject (सदस्य); }  

और इसे

  var json = GetEnumJson & lt; DayOfWeek & gt; () के साथ प्रयोग करें;  

या अगर आप इस पद्धति में कक्षा JsonHelper है तो मैं GetEnumMembers नाम के साथ जाना होगा और इसे इस तरह से कॉल करें:

  var json = JsonHelper.GetEnumMembers & lt; सप्ताह का दिन & gt; ();  

परिणाम:

{"रविवार": 0, "सोमवार": 1, "मंगलवार": 2, "बुधवार": 3, "गुरुवार ": 4," शुक्रवार ": 5," शनिवार ": 6}


Comments