मेरे लिए Concat
एक विस्तार विधि के रूप में मेरे कोड में बहुत सुरुचिपूर्ण नहीं है जब मेरे पास कई बड़े अनुक्रम हैं। यह केवल एक कोडे इंडेंटेशन / स्वरूपण समस्या है और कुछ बहुत ही व्यक्तिगत है।
यकीन है कि यह इस तरह अच्छा लगता है:
var list = list1.Concat(list2).Concat(list3);
जब यह पढता है तो ऐसा नहीं है:
var list = list1.Select(x = > x)
.Concat(list2.Where(x => true)
.Concat(list3.OrderBy(x => x));
या जब ऐसा लगे:
return Normalize(list1, a, b)
.Concat(Normalize(list2, b, c))
.Concat(Normalize(list3, c, d));
या जो कुछ भी आपके पसंदीदा स्वरूपण है। अधिक जटिल कॉन्सर्ट के साथ चीजें खराब हो जाती हैं। उपरोक्त शैली के साथ मेरी तरह की संज्ञानात्मक असंगति का कारण यह है कि पहला अनुक्रम Concat
विधि के बाहर झूठ बोलता है जबकि बाद के अनुक्रम अंदर झूठ बोलते हैं। मैं बल्कि स्टैटिक Concat
विधि को सीधे कॉल करना पसंद करता हूं न कि विस्तार शैली को:
var list = Enumerable.Concat(list1.Select(x => x),
list2.Where(x => true));
अनुक्रमणिका के अधिक संख्या में समतुल्य विधि को मैं ओपी में ले जाता हूं:
public static IEnumerable<T> Concat<T>(params IEnumerable<T>[] sequences)
{
return sequences.SelectMany(x => x);
}
इसलिए मैं लिख सकता हूं:
return EnumerableEx.Concat
(
list1.Select(x = > x),
list2.Where(x => true),
list3.OrderBy(x => x)
);
बेहतर लग रहा है। अतिरिक्त, अन्यथा निरर्थक, कक्षा का नाम जो मुझे लिखना है वह मेरे लिए कोई समस्या नहीं है, यह देखते हुए कि मेरे अनुक्रम Concat
कॉल के साथ क्लीनर दिखते हैं। यह C # 6 में एक समस्या से कम नहीं है । आप बस लिख सकते हैं:
return Concat(list1.Select(x = > x),
list2.Where(x => true),
list3.OrderBy(x => x));
कामना की सूची सी # में हमारे संचालकों के पास थी, कुछ इस प्रकार है:
list1 @ list2 // F#
list1 ++ list2 // Scala
उस तरह से बहुत क्लीनर।