สำหรับฉันแล้วConcat
เนื่องจากวิธีการขยายนั้นไม่สวยงามมากในโค้ดของฉันเมื่อฉันมีลำดับขนาดใหญ่หลายรายการเพื่อเชื่อมต่อ นี่เป็นเพียงปัญหาการเยื้อง / การจัดรูปแบบ codde และเป็นสิ่งที่เป็นส่วนตัวมาก
แน่นอนว่ามันดูดีแบบนี้:
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));
สำหรับจำนวนลำดับที่มากขึ้นฉันใช้วิธีการแบบคงที่เช่นเดียวกับใน OP:
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));
หวังว่าเราจะมีรายการตัวดำเนินการเรียงต่อกันใน C # สิ่งที่ต้องการ:
list1 @ list2
list1 ++ list2
วิธีนั้นสะอาดกว่ามาก