Skip to main content

Copy một list

Vấn đề:

  • Trong C# khi tạo một list mới bằng các List<T> list = new(otherList) thì các phần tử của list vẫn được tham chiếu đến các phần tử của otherList

Nguyên nhân:

  • Trong C# khi sử dụng lệnh List<T> list = new(otherList) chỉ tạo ra được một shallow copy (copy nông). Các phần tử vẫn được tham chiếu đến một vị trí.

Giải pháp

  • Tạo ra một deep copy (copy sâu)
    • Sử dụng vòng for duyệt và tạo mới từng phần tử sau đó thêm vào list mới.
    • Sử dụng Linq để tạo phần từ mới
      • List<T> list = otherList.Select(e => new T()).ToList();
      • List<T> list = otherList.ConvertAll(e => new T());