อะไรคือความแตกต่างระหว่างฟังก์ชันAddRangeและConcatในรายการทั่วไป มีคนแนะนำมากกว่าคนอื่น ๆ หรือไม่?
คำตอบ:
พวกเขามีความหมายที่แตกต่างกันโดยสิ้นเชิง
AddRange แก้ไขรายการโดยการเพิ่มรายการอื่น ๆ
Concat ส่งคืนลำดับใหม่ที่มีรายการและรายการอื่น ๆ โดยไม่ต้องแก้ไขรายการ
เลือกข้อใดก็ได้ที่มีความหมายที่คุณต้องการ
ความแตกต่างที่สำคัญคือ AddRange กลายพันธุ์รายการนั้นกับรายการที่เรียกว่าในขณะที่ Concat สร้างรายการใหม่ ดังนั้นจึงมีการใช้งานที่แตกต่างกัน
นอกจากนี้ Concat เป็นวิธีการขยายที่ใช้กับ IEnumerable และส่งคืน IEnumerable ที่คุณต้องมี. toList () เพื่อให้ได้รายการใหม่
หากคุณต้องการขยายเนื้อหาของรายการที่มีอยู่ให้ใช้ AddRange
หากคุณกำลังสร้างรายการใหม่จากแหล่งที่มาของ IEnumerable สองแหล่งให้ใช้ Concat กับ. toList สิ่งนี้มีคุณภาพที่ไม่กลายพันธุ์จากแหล่งใดแหล่งหนึ่ง
หากคุณต้องการเพียงแค่ระบุเนื้อหาของสอง Lists (หรือ IEnumerable อื่น ๆ ) ให้ใช้ Concat ทุกครั้งสิ่งนี้มีข้อดีคือไม่ได้จัดสรรหน่วยความจำใหม่เพื่อเก็บรายการที่เป็นหนึ่งเดียว
ฉันพบบทความที่น่าสนใจนี้พูดถึงความแตกต่างระหว่างโครงสร้างทั้ง 2 นี้และเปรียบเทียบประสิทธิภาพ ...
แนวคิดหลักคือ AddRange เร็วกว่ามากเมื่อเกี่ยวกับคอลเลกชันขนาดใหญ่
นี่คือลิงค์
หวังว่านี่จะช่วยได้
Concat
และAddRange
มีList<KeyValuePair<string, string>>
1000 องค์ประกอบตัดแบ่ง / เพิ่ม 100 ครั้งและAddRange
เป็นมากได้เร็วขึ้น ผลลัพธ์มีดังนี้AddRange
13 ms, Concat().ToList()
16,000 ms และConcat
เมื่อIEnumerable
ทำเฉพาะToList
ตอนท้าย: 2,700 ms