2010-05-30 11 views
12

मैं enum है enum मान जोड़ने का तरीका:सूची

public enum SymbolWejsciowy 
{ 
    K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 
} 

और मैं सूची में enum जोड़ने के लिए इस enum

public List<SymbolWejsciowy> symbol; 

की लेकिन मेरे रास्ते में सूची बनाना चाहते हैं:
1.

SymbolWejsciowy symbol ; 
symbol.Add(symbol = SymbolWejsciowy.K1); 

2.
symbol.Add(SymbolWejsciowy.K1);

मैं हमेशा पाने के अपवाद

वस्तु संदर्भ एक वस्तु का एक उदाहरण के लिए सेट नहीं।

क्या मैं गलत कार्य करें:/कृपया मदद :)

उत्तर

15

के रूप में अन्य उत्तर पहले ही बताया है, समस्या यह है कि आप एक सूची की घोषणा कर दी है, लेकिन आप एक का निर्माण नहीं किया है ताकि आप एक NullReferenceException मिलता है जब आप तत्व जोड़ने की कोशिश करें।

ध्यान दें कि आप अधिक संक्षिप्त collection initializer syntax उपयोग कर सकते हैं यदि आप एक नया सूची का निर्माण करना चाहते हैं:

List<SymbolWejsciowy> symbols = new List<SymbolWejsciowy> 
{ 
    SymbolWejsciowy.K1, 
    SymbolWejsciowy.K2, 
    // ... 
}; 

आप सभी मूल्यों से युक्त एक सूची चाहते हैं, तो आपको लगता है कि Enum.GetValues फोन करके प्राप्त कर सकते हैं:

List<SymbolWejsciowy> symbols = Enum.GetValues(typeof(SymbolWejsciowy)) 
            .Cast<SymbolWejsciowy>() 
            .ToList(); 
+0

मैं कभी नहीं महसूस किया कि मैं उस गलती करते हैं! हां, मैं सूची शुरू नहीं करता ... धन्यवाद! – netmajor

3

अपने विकल्प 1 SymbolWejsciowy उदाहरण और अपनी सूची में एक ही नाम है, मैं कल्पना है कि एक टाइपो त्रुटि है।

कि लेने के खाते में बिना मैं कहेंगे आप सूची

symbol = new List<SymbolWejsciowy>(); 
2

आपका कोड सूची कभी नहीं initializes का उदाहरण नहीं बनाया था। इस प्रयास करें:

public List<SymbolWejsciowy> symbol = new List<SymbolWejsciowy>(); 
symbol.Add(SymbolWejsciowy.K1); 

और

SymbolWejsciowy mySymbol= SymbolWejsciowy.K2; 
symbol.Add(mySymbol); 
0

यह सुनिश्चित होगा कि Enum.GetValues() को जेनिक्स के लिए सी # 2.0 में वापस अपडेट किया गया था। ठीक है, लगता है कि हम इसे अपने आप को लिखने के लिए है:

static class EnumHelpers<T> where T : struct 
{ 
    public class NotAnEnumException : Exception 
    { 
     public NotAnEnumException() : base(string.Format(@"Type ""{0}"" is not an Enum type.", typeof(T))) { } 
    } 

    static EnumHelpers() 
    { 
     if (typeof(T).BaseType != typeof(Enum)) throw new NotAnEnumException(); 
    } 

    public static IEnumerable<T> GetValues() 
    { 
     return Enum.GetValues(typeof(T)).Cast<T>(); 
    } 

    public static T Parse(string value) 
    { 
     return (T)Enum.Parse(typeof(T), value); 
    } 
} 

मैं Parse() शामिल है क्योंकि यह उसी तरह से जेनरिक से लाभ।

उपयोग:

 var symbols = EnumHelpers<SymbolWejsciowy>.GetValues().ToList(); 

     SymbolWejsciowy s = EnumHelpers<SymbolWejsciowy>.Parse("S2"); 

(एक तरफ: मैं भी काश तुम बात का सिर्फ इस तरह के लिए where T : enum लिख सकता है इसके अलावा, where T : delegate।।)