Ich habe verschiedene ObservableCollections verschiedener Objekttypen. Ich würde gerne eine einzelne Methode schreiben, die eine Sammlung dieser Objekttypen erstellt und eine neue Sammlung zurückgibt, bei der jedes Element eine tiefe Kopie der Elemente in der angegebenen Sammlung ist. Hier ist ein Beispiel für eine bestimmte Klasse
%Vor%Wie kann ich diese Methode für jede Klasse, die ICloneable implementiert, generisch machen?
Ich verwende eine sehr ähnliche Funktion, die mit allen ICollections funktioniert, die konstruiert werden können (z.B. viele Standardsammlungen):
%Vor%Leider kann der Compiler die Typen nicht ableiten, so dass man sie explizit übergeben muss. Für mehr als eine Handvoll Anrufe schreibe ich eine Spezialisierung. Hier ist ein Beispiel für Listen (die selbst mit implizit abgeleitetem T aufgerufen werden können).
%Vor% Ich nutze diese Funktion ausgiebig, um Kopien von Listen zu erstellen, die als Datenquellen für Datagridviews in Dialogen dienen, die abgebrochen werden können. Die geänderte Liste wird einfach verworfen, wenn der Dialog abgebrochen wird. Wenn der Dialog OK ist, ersetzt die bearbeitete Liste einfach das Original. Voraussetzung für dieses Muster ist natürlich eine semantisch korrekte und gut erhaltene T.clone()
.