2012-11-28 14 views
8

कैसे मैं एक शून्य मान के साथ एक enum बना सकता हूँप्रारंभ enum

पूर्व:

public enum MyEnum 
{ 
    [StringValue("X")] 
    MyX, 
    [StringValue("Y")] 
    MyY,  
    None 
} 

जहां कोई भी मूल्य है अशक्त या String.Empty

+1

'[StringValue (" "

public enum MyEnum { [Description(null)] None = 0, [Description("X")] MyX, [Description("Y")] MyY } 

आप निम्न कार्य के साथ Enum का विवरण प्राप्त कर सकते हैं)] 'या' [स्ट्रिंगवैल्यू (शून्य)] 'काम नहीं करता है? – Rawling

+0

यह नहीं करता है: एस –

+0

[संभावित रूप से enum को कैसे सेट करें] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/4337193/how-to-set-enum-to-null) –

उत्तर

15

आप की तरह कुछ कोशिश कर सकते हैं इस: -

public MyEnum? value= null; 

या आप इस कोशिश कर सकते हैं: -

public MyEnum value= MyEnum.None; 
+0

हालांकि उसका प्रश्न उस के लिए पूछता है जवाब यह वह नहीं है जो वह पूछ रहा था। –

+0

मुझे लगता है कि ओपी एक एनम के सदस्य के लिए 'शून्य' मान रखने के लिए कह रहा है। – Oded

+2

@jsobo वे जो पूछ रहे हैं वह असंभव है; यह एक जवाब के रूप में ठीक है IMO –

4

सभी enum प्रकार मूल्य प्रकार के होते हैं और विभिन्न सदस्यों को भी सदस्य प्रकार से प्राप्त कर रहे (अनुमति प्रकार के होते हैं byte, sbyte, short, ushort, int, uint, long, या ulong - documented के रूप में)।

इसका मतलब है कि एक गणना के सदस्य null नहीं हो सकते हैं। एक डिफ़ॉल्ट enum मूल्य से निपटने के लिए

एक तरह से पहले मूल्य के रूप में None मूल्य डाल दिया और एक नकारात्मक मूल्य या 0 (हस्ताक्षरित enums लिए) करने के लिए इसे स्थापित करने के लिए है। myenum? -

public enum MyEnum 
{ 
    [StringValue(null)] 
    None = -1, 
    [StringValue("X")] 
    MyX, 
    [StringValue("Y")] 
    MyY  
} 

आप अगर आप एक नल उदाहरण घोषित एक गणन करने के लिए एक null संदर्भ हो सकते हैं।

+0

मूल्य किसी के पास हमेशा 0 का मान नहीं होना चाहिए। – erikkallen

+1

@erikkallen - यह हमेशा 0 क्यों होना चाहिए। यह -1 भी हो सकता है, यह वास्तव में किसी भी मूल्य से हो सकता है, जो वास्तव में दी गई स्थिति में वास्तविक मूल्य नहीं हो सकता है। –

+0

क्योंकि एनम के डिफ़ॉल्ट प्रारंभकर्ता एनम को '(MyEnum) 0' पर सेट करेंगे। [FxCop सहमत] [http://msdn.microsoft.com/en-us/library/ms182149 (v = vs.80) .aspx)। शायद कोई भी डिफ़ॉल्ट हमेशा नहीं होना चाहिए, उदाहरण के लिए। यदि आपके पास "नकारात्मक विकल्प" का एक हिस्सा है, तो शायद 'सभी' डिफ़ॉल्ट मान होना चाहिए। – erikkallen

4

"?" का उपयोग करें एक नालीदार प्रकार के लिए oeprator !!

public MyEnum? myEnum= null; 
2

"शून्य मूल्य के साथ enum" जैसी कोई चीज़ नहीं है। सी # में एक enum सिर्फ एक नामित पूर्णांक है। आपके मामले में, None2 के लिए केवल एक उपनाम है (पूर्णता के लिए, MyX0 और MyY1 है)। डिफ़ॉल्ट रूप से, enum का अंतर्निहित डेटा-प्रकार int है, लेकिन यह विभिन्न आकार/चिह्न के अन्य पूर्णांक-आधारित आदिम प्रकार भी हो सकता है।

यदि आप "शून्य" enum चाहते हैं, तो आपको MyEnum?, उर्फ ​​Nullable<MyEnum> का उपयोग करना होगा।

5

जैसा कि अन्य सभी उत्तरों ने कहा है, आप नहीं कर सकते हैं एक enum मान शून्य हो। आप कर सकते हैं Description विशेषता (जैसे StringValue) जो शून्य मान है।

उदाहरण के लिए:

public static string GetEnumDescription(Enum value) 
    { 
     FieldInfo fi = value.GetType().GetField(value.ToString()); 

     DescriptionAttribute[] attributes = 
      (DescriptionAttribute[])fi.GetCustomAttributes(
      typeof(DescriptionAttribute), 
      false); 

     if (attributes != null && attributes.Length > 0) 
      return attributes[0].Description; 
     else 
      return value.ToString(); 
    } 

उपयोग::

MyEnum e = MyEnum.None; 
string s2 = GetEnumDescription((MyEnum)e); // This returns null 

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