Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีคัดลอก Collection ไปยัง Array ใน C#

วิธีการคัดลอก List ไปยัง Array

ใช้เมธอด CopyTo() ของ List เพื่อคัดลอกข้อมูลไปยัง Array ที่เตรียมไว้ล่วงหน้า

ขั้นตอน

  1. สร้าง List และเพิ่มข้อมูล
  2. สร้าง Array ขนาดพอดีหรือใหญ่กว่า
  3. เรียก 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() สำหรับกรณีทั่วไป จะง่ายและปลอดภัยกว่า