Ok das ist ein bisschen schwer zu fragen, aber ich werde es versuchen. Ich habe eine Liste mit Objekten (Lots), die wieder eine Liste mit Objekten (Wafers) enthält. Wenn ich einen Wert innerhalb eines Wafers ändere, wird er in beiden Listen geändert! Das ist, was ich will. Aber wenn ich einen Wafer aus der kopierten Liste entfernen möchte, sollte es nicht aus der ursprünglichen Liste entfernt werden. Ich möchte also eine neue Liste von Wafern in jeder Charge haben, aber die Referenzen zu den Wafern sollten die gleichen wie in der ursprünglichen Charge sein, da ich die Werte auf den Wafern ändern möchte und die Werte im Originalwafer und im kopierten Wafer ändern sollte . Ist es möglich ohne tiefere Kopie?Ist es möglich, Elemente in einer Liste einer Liste zu entfernen, ohne die ursprüngliche Referenz zu verlieren?
Ich habe den folgenden Code, es besser zu erklären:
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;
}
Ich hoffe, es ist nicht so verwirrend ist? Und ich hoffe meine Frage ist gut genug erklärt.
Sie können dies ausprobieren http://stackoverflow.com/questions/1582285/how-to-remove-elements-from-a-generic-list-while-iterating-over-it –
Sie können versuchen, zu serialisieren und Dann deserialize ohne eine tiefe Kopie – Saravanan
Sind Sie sicher, dass es nicht funktioniert? Es scheint, dass Sie es richtig machen: Erstellen Sie eine neue Liste von Wafern (das ist wichtig), die von vorhandenen Referenzen ausgefüllt wird. Sollte arbeiten. – JeffRSon