2009-10-21 27 views
6

मान लें कि मेरे पास सी # वर्ग है:सी # में, एक विधि वापसी सूची हो सकती है जैसे क्लाइंट इसे पढ़ सकते हैं, लेकिन इसे लिख नहीं सकते?

class Foo 
{ 
    private List<Bar> _barList; 
    List<Bar> GetBarList() { return _barList; } 
... 
} 

एक क्लाइंट इसे कॉल कर सकता है:

var barList = foo.GetBarList(); 
barList.Add(...); 

Add विधि को विफल करने का कोई तरीका है क्योंकि _barList का केवल पढ़ने-योग्य संस्करण लौटाया गया है ?

+0

याद रखें कि भले ही आप सूची से जोड़ सकते हैं या नहीं निकाल सकते वस्तुओं आप अभी भी (गुण, कॉल तरीकों कि स्थिति बदलने पर सेट मान) सूची में वस्तुओं संशोधित कर सकते हैं। –

उत्तर

15

हाँ, GetBarList() वापसी _barList.AsReadOnly() में।

संपादित करें:
ने माइकल को नीचे ने कहा, अपने विधि एक IList<Bar> वापस जाने के लिए होगा।

+2

अच्छा! ध्यान दें, चूंकि यह एक ReadOnlyCollection देता है, जो IList लागू करता है, आपके एक्सेसर को एक IList भी वापस करना होगा, न कि सूची। –

+0

भयानक, धन्यवाद! – zumalifeguard

+0

माइकल, इसे इंगित करने के लिए धन्यवाद। –

4

आप ReadOnlyCollection इस्तेमाल करने की कोशिश कर सकते हैं। या अपनी विधि से केवल IENumerable लौटें, ग्राहकों को इसे संशोधित करने के तरीके नहीं होंगे।

+0

पूर्व बेहतर है क्योंकि बाद वाले को सूची में वापस लाया जा सकता है –