एक सहकर्मी ने आज मुझसे पूछा कि एक संग्रह में एक सीमा कैसे जोड़नी है। उसके पास एक वर्ग है जो विरासत में मिला है Collection<T>
। वहाँ केवल उस प्रकार की एक संपत्ति है जिसमें पहले से ही कुछ आइटम हैं। वह किसी अन्य संग्रह में आइटम को संपत्ति संग्रह में जोड़ना चाहता है। वह सी # 3-फ्रेंडली अंदाज़ में ऐसा कैसे कर सकता है? (केवल-संपत्ति के बारे में बाधा पर ध्यान दें, जो संघ और पुनर्मुद्रण करने जैसे समाधानों को रोकता है।)
ज़रूर, संपत्ति के साथ एक foreach। जोड़ काम करेगा। लेकिन एक List<T>
शैली AddRange अधिक सुंदर होगा।
एक्सटेंशन विधि लिखना आसान है:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
लेकिन मुझे लग रहा है कि मैं पहिया को फिर से मजबूत कर रहा हूं। मैं System.Linq
या morelinq में समान कुछ भी नहीं मिला ।
खराब डिजाइन? बस कॉल जोड़ें? स्पष्ट याद आ रही है?
ICollection<T>
एक Add
विधि नहीं है। msdn.microsoft.com/en-us/library/… हालाँकि Collection<T>
एक है।
Add(T item)
पहले स्थान पर क्यों है? एक एकल आइटम जोड़ने की क्षमता की पेशकश करने के लिए एक आधे-बेक्ड दृष्टिकोण की तरह लगता है और फिर सभी कॉलर्स को एक समय में एक से अधिक जोड़ने के लिए पुनरावृति की उम्मीद है। आपका कथन निश्चित रूप से सही है, IEnumerable<T>
लेकिन मैंने ICollections
एक से अधिक अवसरों पर खुद को निराश पाया है । मैं आपसे असहमत नहीं हूं, बस वेंटिंग है।