আমার কাছে Concat
এক্সটেনশন পদ্ধতি হিসাবে আমার কোডটি খুব মার্জিত হয় না যখন আমার একাধিক বৃহত ক্রম থাকে conc এটি কেবল একটি কোডের ইনডেন্টেশন / ফর্ম্যাটিং সমস্যা এবং খুব ব্যক্তিগত কিছু।
অবশ্যই এটি দেখতে সুন্দর দেখাচ্ছে:
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
। এটি সি # 6 তে কোনও সমস্যা কম । আপনি কেবল লিখতে পারেন:
return Concat(list1.Select(x = > x),
list2.Where(x => true),
list3.OrderBy(x => x));
আশা করি আমাদের সি # তে তালিকাবদ্ধকরণ অপারেটর রয়েছে, এরকম কিছু:
list1 @ list2
list1 ++ list2
অনেক ক্লিনার সেভাবে।