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...).