Ok đây là một chút khó khăn để yêu cầu, nhưng tôi sẽ cố gắng. Tôi có một Danh sách với các đối tượng (Rất nhiều), trong đó lại chứa một danh sách với các đối tượng (các tấm). Khi tôi thay đổi một giá trị trong một wafer, nó sẽ được thay đổi trong cả hai danh sách! Đó là điều tôi muốn. Nhưng khi tôi muốn loại bỏ một wafer khỏi danh sách sao chép, nó không nên được loại bỏ khỏi danh sách gốc. Vì vậy, tôi muốn có một danh sách mới các tấm trong mỗi lô nhưng các tham chiếu đến các tấm wafer phải giống như trong lô ban đầu vì tôi muốn thay đổi các giá trị thành các tấm và nó nên thay đổi các giá trị trong wafer ban đầu và sao chép wafer . Có thể không có bản sao sâu?Có thể xóa các mục trong danh sách danh sách mà không mất tham chiếu gốc không?
Tôi có đoạn code sau đây, để giải thích nó tốt hơn:
public class Lot
{
public string LotName { get; set; }
public List<Wafer> Wafers { get; set; }
}
public class Wafer
{
public string WaferName { get; set; }
}
[Test]
public void ListInListTest()
{
//Some Testdata
List<Lot> lotList = new List<Lot>();
Lot lot = new Lot();
lot.LotName = "Lot1";
lot.Wafers = new List<Wafer>();
Wafer wafer = new Wafer();
wafer.WaferName = "Wafer1";
lot.Wafers.Add(wafer);
wafer = new Wafer();
wafer.WaferName = "Wafer2";
lot.Wafers.Add(wafer);
wafer = new Wafer();
wafer.WaferName = "Wafer3";
lot.Wafers.Add(wafer);
wafer = new Wafer();
wafer.WaferName = "Wafer4";
lot.Wafers.Add(wafer);
lotList.Add(lot);
lot = new Lot();
lot.LotName = "Lot1";
lot.Wafers = new List<Wafer>();
wafer = new Wafer();
wafer.WaferName = "Wafer1";
lot.Wafers.Add(wafer);
wafer = new Wafer();
wafer.WaferName = "Wafer2";
lot.Wafers.Add(wafer);
wafer = new Wafer();
wafer.WaferName = "Wafer3";
lot.Wafers.Add(wafer);
wafer = new Wafer();
wafer.WaferName = "Wafer4";
lot.Wafers.Add(wafer);
lotList.Add(lot);
//Copy the List
List<Lot> copyList = CopyList(lotList);
//That works. It removes the lot just in the copyList but not in
//the original one
copyList.RemoveAt(1);
//This works not like i want. It removes the wafers from the copied list
//and the original list. I just want, that the list will be changed
//in the copied list
copyList[0].Wafers.RemoveAt(0);
}
private List<Lot> CopyList(List<Lot> lotList)
{
List<Lot> result = new List<Lot>(lotList);
foreach (Lot lot in result)
{
lot.Wafers = new List<Wafer>(lot.Wafers);
}
return result;
}
Tôi hy vọng nó không phải là quá khó hiểu? Và tôi hy vọng câu hỏi của tôi được giải thích đủ tốt.
bạn cany thử http://stackoverflow.com/questions/1582285/how-to-remove-elements-from-a-generic-list-while-iterating-over-it –
Bạn có thể thử tuần tự hóa và sau đó deserialize mà không có một bản sao sâu – Saravanan
Bạn có chắc chắn rằng nó không hoạt động? Có vẻ như bạn đang làm đúng: tạo danh sách mới các tấm (quan trọng) được điền bởi các tham chiếu hiện có. Nên làm việc. – JeffRSon