नियम है कि a public APIs should never return a list, मैं सभी कोड है कि लौटे सूचियों परिवर्तित चकाचौंध कर रहा हूँ के बाद, ICollection<T>
बजाय वापस जाने के लिए:क्या आईसीओलेक्शन <T> एक ऑर्डर है?
public IList<T> CommaSeparate(String value) {...}
public ICollection<T> CommaSeparate(String value) {...}
और हालांकि एक ICollection
एक Count
है, कोई हो जाता है उस सूचकांक द्वारा आइटम प्राप्त करने का तरीका।
और हालांकि एक ICollection
एक प्रगणक (foreach
अनुमति) को उजागर करता है, मैं कोई गारंटी नहीं देखते हैं कि गणना के आदेश, के रूप में "नीचे" के लिए विरोध सूची के "टॉप" पर शुरू होता है।
मैं ICollection
का उपयोग न करके इस को कम कर सकता है, और बदले Collection
का उपयोग करें:
public Collection<T> Commaseparate(String value) {...}
यह एक Items[index]
वाक्य रचना के उपयोग की अनुमति देता है।
दुर्भाग्यवश, मेरा आंतरिक कार्यान्वयन एक सरणी बनाता है; जो मैं IList
या ICollection
लौटने के लिए डाला जा सकता है, लेकिन Collection
के रूप में नहीं।
संग्रह के आइटम तक पहुंचने का कोई तरीका है?
यह व्यापक सवाल भीख माँगता: क्या एक ICollection भी कोई ऐसा आदेश है?
वैचारिक रूप से, कल्पना मैं एक कमांड लाइन स्ट्रिंग पार्स करना चाहते हैं। यह महत्वपूर्ण है कि वस्तुओं का क्रम बनाए रखा जाए।
संकल्पनात्मक रूप से, मुझे एक अनुबंध की आवश्यकता है जो स्ट्रिंग टुपल्स के "आदेशित" सेट को इंगित करता है।
IEnumerable<String> Grob(string s)
ICollection<String> Grob(string s)
IList<String> Grob(string s)
Collection<String> Grob(string s)
List<String> Grob(string s)
एक तरफ, मुझे लगता है कि आप मूल लेख को गलत तरीके से पढ़ते हैं जिसे आपने अपने रिफैक्टरिंग के आधार के रूप में उद्धृत किया है। यह कहता है कि 'सूची' (कक्षा) के उदाहरणों को पास न करें, न कि 'IList '(इंटरफ़ेस)। इंटरफ़ेस को अनुक्रमित पहुंच की आवश्यकता होने पर यह 'IList 'पास करने के लिए पूरी तरह वैध आईएमएचओ है। –
IOrderedEnumerable के बारे में क्या, LINQ ऑर्डर द्वारा वापस आती है? – Euphoric