Hier gibt es zwei verschiedene Probleme. Das Kopieren einer Liste in eine andere Liste ist relativ einfach - wenn Sie nicht brauchen, dass die zweite Liste genau die gleiche Art von konkreter Liste ist, könnten Sie ToList()
verwenden, sonst könnten Sie einfach Add
in einer Schleife. Allerdings wird Ihr Problem nicht lösen, wenn die T
hier etwas unveränderlich ist. Es wäre in Ordnung für string
, int
usw., aber das Kopieren der Verweise auf einen komplexen Typ ermöglicht Ihnen nicht, die Liste wiederherzustellen, da einzelne Elemente in der Benutzeroberfläche bearbeitet werden konnten. Um das Problem zu lösen, benötigen Sie eine "tiefe Kopie" (oder es gibt einige andere Strategien, aber das ist das einfachste). Und wie bereits erwähnt: Eine Möglichkeit, eine tiefe Kopie zu erstellen, ist: Serialisierung. Indem ein Snapshot der Daten in XML, JSON oder einem anderen Serialisierungsformat erstellt wird, kann "Wiederherstellung" über "Deserialisierung" implementiert werden.
Natürlich, wenn Ihre T
eine Deep-Clone-Methode eingebaut hat, können Sie diese anstelle der Serialisierung verwenden. Es ist mehrdeutig, ob ICloneable
tief gegen flach ist, also glaube ich nicht, dass es ausreicht, darauf zu bestehen where T : ICloneable
.
, was Sie versucht hatte? –
Hinweis: Sehen Sie in der Dokumentation zu IList nach: https://msdn.microsoft.com/en-us/library/5y536ey6%28v=vs.110%29.aspx. –
devuxer
Sie müssen die Liste serialisieren und dann bei Bedarf deserialisieren. – bobah75