.NET นำเสนอคอนเทนเนอร์รายการทั่วไปที่มีประสิทธิภาพเกือบเหมือนกัน (ดูคำถามประสิทธิภาพของอาร์เรย์เทียบกับรายการ) อย่างไรก็ตามมันค่อนข้างแตกต่างกันในการเริ่มต้น
อาร์เรย์เป็นเรื่องง่ายมากที่จะเริ่มต้นด้วยค่าเริ่มต้นและตามความหมายพวกเขามีขนาดที่แน่นอนแล้ว:
string[] Ar = new string[10];
ซึ่งช่วยให้สามารถกำหนดรายการแบบสุ่มได้อย่างปลอดภัยพูดว่า:
Ar[5]="hello";
ด้วยรายการสิ่งที่ยุ่งยากกว่า ฉันสามารถเห็นสองวิธีในการเริ่มต้นเดียวกันซึ่งทั้งสองวิธีนี้ไม่ใช่สิ่งที่คุณเรียกว่าสง่างาม:
List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
หรือ
string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
อะไรจะเป็นวิธีที่สะอาดกว่านี้?
แก้ไข: คำตอบจนถึงตอนนี้อ้างถึงความจุซึ่งเป็นอย่างอื่นที่ไม่ใช่การเติมรายการล่วงหน้า ตัวอย่างเช่นในรายการที่เพิ่งสร้างขึ้นโดยมีความจุ 10 รายการไม่สามารถทำได้L[2]="somevalue"
แก้ไข 2: ผู้คนสงสัยว่าทำไมฉันถึงต้องการใช้รายการด้วยวิธีนี้เนื่องจากไม่ใช่วิธีที่พวกเขาตั้งใจจะใช้ ฉันเห็นเหตุผลสองประการ:
คนหนึ่งสามารถโต้แย้งได้อย่างน่าเชื่อว่ารายการเป็นอาร์เรย์ "รุ่นต่อไป" โดยเพิ่มความยืดหยุ่นโดยแทบไม่มีการลงโทษ ดังนั้นควรใช้เป็นค่าเริ่มต้น ฉันกำลังชี้ให้เห็นว่าอาจไม่ง่ายในการเริ่มต้น
สิ่งที่ฉันกำลังเขียนอยู่คือคลาสพื้นฐานที่มีฟังก์ชันการทำงานเริ่มต้นซึ่งเป็นส่วนหนึ่งของเฟรมเวิร์กที่ใหญ่กว่า ในฟังก์ชันเริ่มต้นที่ฉันนำเสนอขนาดของรายการเป็นที่รู้จักในขั้นสูงดังนั้นฉันจึงสามารถใช้อาร์เรย์ได้ อย่างไรก็ตามฉันต้องการให้คลาสพื้นฐานใด ๆ มีโอกาสที่จะขยายแบบไดนามิกดังนั้นฉันจึงเลือกใช้รายชื่อ
List
ไม่สามารถทดแทนArray
ได้ พวกเขาแก้ปัญหาที่แยกจากกันอย่างชัดเจน หากคุณต้องการขนาดคงที่คุณต้องการขนาดArray
. หากคุณใช้ a แสดงList
ว่าคุณทำผิด