बड़ा सवाल यह है कि "अब आप इसके बारे में क्या करते हैं?" संभवतः आप कोड चाहते हैं जो प्राप्त कर सकते हैं को बदलने में सक्षम होने के लिए सूची प्राप्त करें।
यहां कई विकल्प हैं।
सबसे पहले, कोई फर्क नहीं पड़ता कि आप क्या करते हैं, मैं अनुशंसा करता हूं कि आप अभी ArrayList का उपयोग करना बंद करें और चीजों की एक सूची संग्रहीत करने के लिए एक अधिक आधुनिक, सुरक्षित प्रकार का उपयोग शुरू करें। List<string>
तुरंत दिमाग में आता है।
दूसरा, क्या यह आवश्यक है कि संपत्ति के सेटर सार्वजनिक हों? क्या आप चाहते हैं कि कोई भी उस सूची को बदलने में सक्षम हो? या किसी भी तरह इसे अद्यतन करने के लिए टाइप स्वयं जिम्मेदार होना चाहिए? मैं सेटर निजी बनाने पर विचार करता हूं।
तीसरा, हमारे पास "छोटी" संपत्ति के लिए एक अधिक कॉम्पैक्ट वाक्यविन्यास है।आप कह सकते हैं
public List<string> SpillageListDescriptions { get; private set; }
और संकलक आपके लिए बैकिंग फ़ील्ड उत्पन्न करेगा।
ध्यान दें कि List<string>
अभी भी उत्परिवर्तन की अनुमति देता है।
सभी ग्राहक परवाह करता है के बारे में एक समय में सूची एक बात से अधिक पुनरावृति करने में सक्षम किया जा रहा है, तो आप ऐसा कर सकते हैं:
private List<string> descriptions = whatever;
public IEnumerable<string> SpillageListDescriptions
{
get
{
if (descriptions == null) yield break;
foreach(var description in descriptions)
yield return description;
}
}
और अब यह असंभव है फोन करने वाले सूची उत्परिवर्तित करने के लिए, क्योंकि आप उन्हें दे रहे हैं, इस पर एक इटेटरेटर है, सूची में ही नहीं।
या आप कर सकता है:
private List<string> descriptions = whatever;
public IList<string> SpillageListDescriptions
{
get
{
return new ReadOnlyCollection<string>(descriptions);
}
}
और अब फोन करने वाले सूची अगर वे इसे संशोधित करने का प्रयास है कि एक अपवाद फेंक होगा की केवल पढ़ने के लिए दृश्य है।
इसे सी ++ की तरह सोचें, आप किसी ऑब्जेक्ट को पॉइंटर पास कर सकते हैं, और आप उस पॉइंटर को इंगित कर सकते हैं, लेकिन आप इसे किसी अन्य चीज़ पर इंगित नहीं कर सकते क्योंकि आपके पास पॉइंटर की एक प्रति है और मूल सूचक नहीं है । यदि आप यह बदलना चाहते हैं कि यह किस ऑब्जेक्ट को इंगित करता है, तो आपको पॉइंटर को पॉइंटर (या पॉइंटर का संदर्भ) पास करना होगा। यही कारण है कि सी # में आपको रेफरी और आउट कीवर्ड की आवश्यकता होती है यदि आप बदलना चाहते हैं कि किस ऑब्जेक्ट को संदर्भित किया जा रहा है। –
उत्कृष्ट - यह सही समझ में आता है –