2011-06-17 6 views
7

इस प्रश्न का उत्तर नहीं मिला। यह स्पष्ट होना चाहिए, लेकिन फिर भी।शुरुआतीकरण गुणों की वापसी सूची <t> के साथ प्रारंभकर्ता क्यों काम नहीं करता है?

मैं इस सरल उदाहरण में प्रारंभकर्ता इस्तेमाल करने की कोशिश:

MyNode newNode = new MyNode 
    { 
     NodeName = "newNode", 
     Children.Add(/*smth*/) // mistake is here 
    }; 

जहां बच्चे इस वर्ग है, जो एक सूची देता है के लिए एक संपत्ति है। और यहां मैं एक गलती में आया, जो 'अमान्य प्रारंभकर्ता सदस्य घोषणाकर्ता' की तरह जाता है।

यहां क्या गलत है, और आप इस तरह के गुणों को कैसे प्रारंभ करते हैं? आपका अग्रिम रूप से बोहोत धन्यवाद!

+0

यह एक संपत्ति शुरू नहीं कर रहा है। आप एक विधि बुला रहे हैं। – BoltClock

उत्तर

19

आप ऑब्जेक्ट प्रारंभकर्ताओं में इस तरह के तरीकों को कॉल नहीं कर सकते हैं - आप केवल कॉल विधियों के बजाय गुण या फ़ील्ड सेट कर सकते हैं।

MyNode newNode = new MyNode 
{ 
    NodeName = "newNode", 
    Children = { /* values */ } 
}; 

ध्यान दें कि यह Children के लिए एक नया मान असाइन करने की कोशिश नहीं करेंगे, यह Children.Add(...), फोन करेगा इस तरह::

हालांकि इस मामले में आप शायद अभी भी वस्तु और संग्रह प्रारंभकर्ता सिंटैक्स का उपयोग कर सकते हैं
var tmp = new MyNode(); 
tmp.NodeName = "newNode": 
tmp.Children.Add(value1); 
tmp.Children.Add(value2); 
... 
MyNode newNode = tmp; 
2

क्योंकि आप एक विधि को क्रियान्वित कर रहे हैं, एक मूल्य के

2

क्षेत्र प्रारंभकर्ता वाक्य रचना केवल खेतों और गुण, नहीं तरीकों फोन करने के लिए स्थापित करने के लिए इस्तेमाल किया जा सकता बताए नहीं। यदि ChildrenList<T> है, तो आप इसे इस तरह पूरा करने के लिए, से भी सूची प्रारंभकर्ता वाक्य रचना सहित सक्षम हो सकता है:

T myT = /* smth */ 

MyNode newNode = new MyNode 
{ 
    NodeName = "newNode", 
    Children = new List<T> { myT } 
}; 
2

निम्नलिखित initialiser में एक मूल्य की स्थापना नहीं कर रहा है:

Children.Add(/*smth*/) // mistake is here 

यह कोशिश कर रहा है एक क्षेत्र के एक सदस्य (एक नहीं अभी तक initialised एक भी।) का उपयोग करने की

4

यह इसलिए क्योंकि बच्चों संपत्ति आरंभ नहीं किया है

MyNode newNode = new MyNode 
    { 
     NodeName = "newNode", 
     Children = new List<T> (/*smth*/) 
    }; 
2

प्रारंभकर्ता केवल गुणों को शुरू करने के लिए हैं, अन्य कार्यों के अलावा।

आप बच्चों की सूची शुरू करने की कोशिश नहीं कर रहे हैं, तो आप इसमें कुछ जोड़ने की कोशिश कर रहे हैं।

Children = new List<smth>() इसे प्रारंभ कर रहा है।