วิธีการคัดลอก List ไปยัง Array
ใช้เมธอด CopyTo() ของ List เพื่อคัดลอกข้อมูลไปยัง Array ที่เตรียมไว้ล่วงหน้า
ขั้นตอน
- สร้าง List และเพิ่มข้อมูล
- สร้าง Array ขนาดพอดีหรือใหญ่กว่า
- เรียก
list.CopyTo(array)
โค้ดตัวอย่างสมบูรณ์
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
// 1. สร้าง List และเพิ่มข้อมูล
List list1 = new List();
list1.Add("Car");
list1.Add("Bus");
list1.Add("Motorbike");
list1.Add("Train");
Console.WriteLine("First list...");
foreach (string value in list1) {
Console.WriteLine(value);
}
// 2. สร้าง Array (ขนาดต้อง >= จำนวนสมาชิกใน List)
string[] arr = new string[20];
// 3. คัดลอกข้อมูล
list1.CopyTo(arr);
Console.WriteLine("\nAfter copy...");
foreach (string value in arr) {
Console.WriteLine(value);
}
}
}
ตัวอย่างผลลัพธ์
First list...
Car
Bus
Motorbike
Train
After copy...
Car
Bus
Motorbike
Train
หมายเหตุ: Array มีขนาด 20 แต่ List มีแค่ 4 ตัว ดังนั้นตำแหน่งที่ 4-19 จะเป็น null
วิธีอื่นๆ ในการคัดลอก
1. ใช้ ToArray() - สร้าง Array ใหม่ขนาดพอดี (แนะนำ)
string[] arr = list1.ToArray();
// arr.Length จะเท่ากับ list1.Count อย่างแน่นอน
2. ใช้ Array.Copy() - คัดลอกบางส่วน
string[] arr = new string[10];
Array.Copy(list1.ToArray(), 0, arr, 2, 3); // คัดลอก 3 ตัวจาก index 0 ไป index 2
3. ใช้ LINQ
string[] arr = list1.Select(x => x).ToArray();
// หรือกรองข้อมูลพร้อมกัน
string[] filtered = list1.Where(s => s.Length > 3).ToArray();
ตารางเปรียบเทียบวิธีการ
| วิธี | ขนาด Array ผลลัพธ์ | ประสิทธิภาพ | เหมาะสำหรับ |
|---|---|---|---|
CopyTo() |
ต้องกำหนดเอง (อาจใหญ่เกิน) | ดี | คัดลอกไป Array ที่มีอยู่แล้ว |
ToArray() |
พอดีกับข้อมูล | ดี | สร้าง Array ใหม่ (แนะนำส่วนใหญ่) |
Array.Copy() |
กำหนดเอง | ดีมาก (Low-level) | คัดลอกบางส่วน / รวม Array |
LINQ ToArray() |
พอดีกับข้อมูลที่กรองแล้ว | ปานกลาง | ต้องการกรอง/แปลงข้อมูลพร้อมกัน |
⚠️ ข้อควรระวัง
CopyTo()จะโยน Exception ถ้า Array เล็กกว่าจำนวนสมาชิกใน List- Array ที่คัดลอกไปจะเป็น Shallow Copy (Reference Type จะอ้างอิงอ็อบเจ็กต์เดิม)
- ใช้
ToArray()สำหรับกรณีทั่วไป จะง่ายและปลอดภัยกว่า