2015-12-20 11 views
6

पर संग्रह प्रारंभकर्ता का उपयोग करके मैं अपनी कक्षा में प्रारंभिक संग्रह जोड़ने की कोशिश कर रहा हूं। मैं initializers यहाँ के बारे में पढ़ा: https://msdn.microsoft.com/en-us/library/bb384062.aspx#Anchor_2अपनी खुद की कक्षा

मैं महत्वपूर्ण हिस्सा है कि मुझे पहेली बोली होगी:

Collection initializers let you specify one or more element initializers when you initialize a collection class that implements IEnumerable or a class with an Add extension method.

ठीक है, तो मैं शब्द या पर जोर देना चाहते। जैसा कि मैंने इसे पढ़ा है, मुझे के साथ कक्षा बनाने में सक्षम होना चाहिए विधि जोड़ें, और उसके बाद संग्रह प्रारंभकर्ता को इस कक्षा पर काम करना चाहिए? यह मामला प्रतीत नहीं होता है। एक बात मैंने नोट किया था, यह वास्तव में एक विस्तार विधि जोड़ें कहते हैं। तो मैंने ऐड को एक्सटेंशन विधि के रूप में भी बनाने का प्रयास किया, लेकिन इसका कोई फायदा नहीं हुआ।

public class PropertySpecificationCollection 
{ 
    private List<PropertySpecification> _internalArr; 
    public void Add(PropertySpecification item) 
    { 
     _internalArr.Add(item); 
    } 
} 

मेरा अलावा अन्य व्याख्याओं के उद्धरण अधीन है:

यहाँ एक छोटा सा नमूना मैंने कोशिश की है कि काम नहीं करता है? मैंने इसे बार-बार पढ़ने की कोशिश की, यह देखने के लिए कि क्या मैं इसे किसी अन्य तरीके से समझ सकता हूं, लेकिन ऐसा करने में असफल रहा।

तो मुझे लगता है कि मेरा सवाल है: क्या मैं इसे गलत समझ रहा हूं, क्या मुझे कुछ याद आ रही है, या क्या एमएसडीएन पर संग्रह प्रारंभकर्ताओं के विवरण में कोई त्रुटि है?

+0

क्या होता है जब आप 'PropertySpecificationCollection' का उदाहरण बनाते हैं और कन्स्ट्रक्टर में संग्रह प्रारंभ करते हैं? –

+2

यह प्रलेखन में एक त्रुटि की तरह दिखता है, आपको 'IENumerable' को लागू करना होगा और एक उपयुक्त 'जोड़ें' विधि होनी चाहिए। – Lee

+0

http://stackoverflow.com/questions/2495791/custom-collection-initializers – Mino

उत्तर

4

यह "और", नहीं "या" होना चाहिए।

संग्रह initializers C# language specification में वर्णित हैं, खंड 7.6.10.3 संग्रह initializers:

The collection object to which a collection initializer is applied must be of a type that implements System.Collections.IEnumerable or a compile-time error occurs. For each specified element in order, the collection initializer invokes an Add method on the target object with the expression list of the element initializer as argument list, applying normal overload resolution for each invocation. Thus, the collection object must contain an applicable Add method for each element initializer.

यह स्पष्ट रूप से कहा गया है कि संग्रह को लागू करना चाहिए IEnumerableऔर वहाँ एक Add विधि की जरूरत है। Add विधि को कॉल को सामान्य अधिभार रिज़ॉल्यूशन प्रक्रिया का उपयोग करके हल किया जाता है, इसलिए यह एक विस्तार विधि, जेनेरिक विधि इत्यादि हो सकता है

+0

धन्यवाद। क्या आप उद्धरण के अतिरिक्त सी # भाषा विनिर्देश के अनुभाग को एक लिंक प्रदान कर सकते हैं? – Inrego

+0

@Inrego यह केवल .docx के रूप में उपलब्ध है। मैंने डाउनलोड साइट को लिंक किया। –

+0

@ जैकोब धन्यवाद। कोई आश्चर्य नहीं कि मुझे इसे वेब खोजों में नहीं मिला है। – Inrego

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