2009-07-06 20 views
6

स्ट्रिंग की केवल-पढ़ने की सूची रखने के लिए इस तरह के दृष्टिकोण का उपयोग करना अच्छा है, उदाहरण के लिए, ADO.NET में फ़ील्ड की एक सूची।तारों की केवल पढ़ने की सूची

var list = new System.Collections.ObjectModel.ReadOnlyCollection<string>(
      new List<string>(4) { "type", "currency", "date", "amount" }); 

या यह एक अनिवार्य समाधान है?

उत्तर

8

आपकी स्थिति पर निर्भर करता है। ReadOnlyCollection बहुत अच्छी तरह से काम करता है जब आपके पास एक आंतरिक संशोधित सूची होती है जिसे किसी अन्य कोड को दिया जाना आवश्यक है जिसे सूची बदलने की अनुमति नहीं है। सरल कोड के लिए, ReadOnlyCollection का उपयोग शायद अधिक हो गया है। यदि कोड बड़ा है और जोखिम है तो कुछ अन्य प्रोग्रामर (या आप, सड़क के नीचे) गलती से सूची को संशोधित करने का प्रयास कर सकते हैं, तो यह इसके लायक हो सकता है।

संक्षेप में: ReadOnlyCollection का उपयोग न करें, इसे समझने पर इसका उपयोग करें।

5

यदि संभव हो, तो स्थिर प्रकार की जांच पसंद करें। IEnumerable<string> पढ़ा गया है।

IEnumerable<string> list = new List<string> { "type", "currency", "date", "amount" }; 

बाद कोड सूची को संशोधित नहीं कर सकते हैं, और गलतियों संकलन समय पर पकड़ा जाएगा - जब तक आप प्रतिबिंब का उपयोग, लेकिन तब प्रतिबिंब क्रम चेकों को नाकाम करने के रूप में अच्छी तरह से इस्तेमाल किया जा सकता है।

+0

नहीं, इसका उपयोग न करें क्योंकि बाद के कोड को 'सूची ' पर वापस लाया जा सकता है; प्रतिबिंब की आवश्यकता नहीं है। –

+1

@ केविन ब्रॉक अगर प्रतिबिंब की आवश्यकता होती है, तो यह चारों ओर घूमने के लिए शून्य प्रयास होगा, देखें: http://stackoverflow.com/a/1232332/27423 - अपने "पठनीय" रैपर को खोलने "ब्लॉक" करने का प्रयास करना भी बदतर है निकम्मा। यह वास्तविक मूल्य जोड़ने के बिना जटिलता (और शायद रनटाइम लागत) जोड़ता है। स्थैतिक प्रकार प्रणाली के माध्यम से अपने एपीआई के सही उपयोग को दस्तावेज करें - कुछ और व्यर्थ है। –

4

.NET 2.0 पर वापस जाकर, सूची वर्ग में AsReadOnly() विधि थी। जब जेनेरिक साथ आए, List<T> भी इसे मिला। यहां MSDN reference page है।

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