2010-03-12 12 views
11

मैं के माध्यम से एक संग्रह संपत्ति के माध्यम से एक आंतरिक सदस्य को उजागर कर रहा हूँ, तो:क्या संग्रह <T> एक IList <T> लपेटता है या IList <T> पर गणना करता है?

public Collection<T> Entries 
{ 
    get { return new Collection<T>(this.fieldImplimentingIList<T>); } 
} 

इस संपत्ति कहा जाता है जब क्या होता है?

T test = instanceOfAbove.Entries[i]; 
instanceOfAbove[i] = valueOfTypeT; 

यह है कि हर बार इस संपत्ति कहा जाता है एक नया संदर्भ प्रकार बनाई गई है लेकिन क्या acctually होता है स्पष्ट है: उदाहरण के लिए क्या जब कोड के निम्नलिखित लाइनों कहा जाता है क्या होता है? क्या यह नीचे IList<T> को लपेटता है, क्या यह IList<T> पर गिनती है और एक नया Collection<T> उदाहरण बनाने के लिए है? यदि इस संपत्ति का उपयोग for लूप में किया जाता है तो मैं प्रदर्शन के बारे में चिंतित हूं।

+0

'संग्रह ' 'IList ' लपेटता है। आप इसे संग्रह के रूप में क्यों लौट रहे हैं? इसे IENumerable के रूप में क्यों न उजागर करें? क्या आप अंतर्निहित सूची में संशोधन को रोकने की कोशिश कर रहे हैं? –

+0

प्रश्न के लिए धन्यवाद! मैंने नहीं सोचा है कि संग्रह सूची में सिर्फ एक रैपर है;) –

उत्तर

4

परावर्तक के अनुसार, नई Collection<T> सिर्फ लपेटता IList<T>:

public Collection(IList<T> list) 
{ 
    if (list == null) 
    { 
     ThrowHelper.ThrowArgumentNullException(ExceptionArgument.list); 
    } 
    this.items = list; 
} 

और the docs से:

संग्रह < का एक नया उदाहरण आरंभीकृत (के < (टी>)>) निर्दिष्ट सूची के लिए एक रैपर के रूप में।

(जोर जोड़ा)

तो भूमि के ऊपर कम है (सूची प्रगणित नहीं है), और वापस आ संग्रह में परिवर्तन मूल सूची को प्रभावित करेगा।

(वैसे, मैं यह सोचते हैं रहा हूँ आप System.Collections.ObjectModel.Collection<T> की बात कर रहे - वहाँ उच्च-स्तरीय System.Collections नाम स्थान में संग्रह की एक सामान्य संस्करण नहीं है।)

+0

आप नामस्थान के बारे में सही हैं। मेरी गलती। मैंने प्रश्न शीर्षक संपादित किया। –

2

परावर्तक के अनुसार - यहाँ निर्माता है संग्रह का:

public Collection(IList<T> list) 
{ 
    if (list == null) 
    { 
     ThrowHelper.ThrowArgumentNullException(ExceptionArgument.list); 
    } 
    this.items = list; 
} 

तो आप संग्रह संग्रह को देख सकते हैं और कोई डेटा कॉपी नहीं किया गया है।

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