2012-06-13 17 views
7

आप सी # में निम्नलिखित की तरह कुछ कैसे कर सकते हैं?Nullable <Enum> का प्रकार कैसे प्राप्त करें?

Type _nullableEnumType = typeof(Enum?); 

मुझे लगता है कि एक बेहतर सवाल यह है कि आपको लगता है कि जब आप यह कर सकते हैं क्यों नहीं कर सकते हैं:

Type _nullableDecimalType = typeof(decimal?); 
+1

ऐसा कोई प्रकार वास्तव में मौजूद नहीं है - आप इसका उपयोग करने की योजना कैसे बना रहे हैं? 'एनम' स्वयं एक संदर्भ प्रकार है, न कि मूल्य प्रकार। –

उत्तर

14

Enumहै नहीं एक enum - यह enums के लिए आधार स्तरीय है, और एक संदर्भ-प्रकार है (यानी class)। इसका मतलब है कि Enum? अवैध है, Nullable<T> पर प्रतिबंध है कि T : struct, और Enum इसे संतुष्ट नहीं करता है।

तो: या तो typeof(Nullable<>).MakeGenericType(enumTypeKnownAtRuntime), या बस अधिक, typeof(EnumTypeKnownAtCompileTime?)

का उपयोग आप यह भी ध्यान रखें कि चाह सकते हैं:

Enum x = {some value}; 

, एक बॉक्सिंग आपरेशन है तो आप आमतौर पर Enum का उपयोग कर से बचना चाहिए पैरामीटर इत्यादि के रूप में

+0

वाह मुझे याद आया :) –

+0

ग्रेट स्पष्टीकरण मार्क। धन्यवाद। – devlife

संबंधित मुद्दे