Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Sao chép/Clone List trong C#

Sao chép List: CopyTo (sang mảng), ToList() (tạo List mới), constructor new List<T>(existing), hoặc List.AddRange.

Ví dụ minh họa

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        var original = new List { "One", "Two", "Three", "Four" };
        
        Console.WriteLine("List gốc:");
        Console.WriteLine(string.Join(", ", original));
        
        // Cách 1: Constructor (shallow copy - khuyên dùng)
        var copy1 = new List(original);
        Console.WriteLine($"\nConstructor: {string.Join(", ", copy1)}");
        
        // Cách 2: ToList() từ IEnumerable
        var copy2 = original.ToList();
        Console.WriteLine($"ToList(): {string.Join(", ", copy2)}");
        
        // Cách 3: CopyTo sang mảng
        string[] array = new string[original.Count];
        original.CopyTo(array);
        var copy3 = new List(array);
        Console.WriteLine($"CopyTo array: {string.Join(", ", copy3)}");
        
        // Cách 4: AddRange
        var copy4 = new List();
        copy4.AddRange(original);
        Console.WriteLine($"AddRange: {string.Join(", ", copy4)}");
        
        // Cách 5: LINQ Select (deep copy cho object)
        // var deepCopy = original.Select(x => new MyClass(x)).ToList();
        
        // Kiểm tra shallow copy
        copy1[0] = "Modified";
        Console.WriteLine($"\nSau khi sửa copy1[0]:");
        Console.WriteLine($"Gốc: {original[0]}");      // "One" - không đổi
        Console.WriteLine($"Copy: {copy1[0]}");        // "Modified"
    }
}

Kết quả đầu ra

List gốc:
One, Two, Three, Four

Constructor: One, Two, Three, Four
ToList(): One, Two, Three, Four
CopyTo array: One, Two, Three, Four
AddRange: One, Two, Three, Four

Sau khi sửa copy1[0]:
Gốc: One
Copy: Modified

Lưu ý: Tất cả đều là shallow copy (copy tham chiếu cho reference type). Với class object, cần deep copy thủ công (clone, constructor copy, serialization, AutoMapper...).