Weiter gehts in unserer Beitragsserie „Hilfreiche Funktionen in C# .NET„! Heute stelle ich nur kurz eine Funktion vor, mit welcher man eine Deepcopy bzw. einen Clone eines Objektes herstellen kann. Das ist beispielsweise sehr nützlich, wenn man ein Objekt im Entity-Framework kopieren und als neuen Datensatz abspeichern will.Wie immer in der Beitragsserie liegt auch diese Funktion als statische Funktion in einer statischen Klasse vor, was die Benutzung sehr vereinfacht. Man kann im Grunde jedes beliebige Objekt übergeben – es muss lediglich serialisierbar sein.
Übergibt man ein null als Objekt, bekommt man den Typ des übergebenen Objekts zurück. Wenn kein serialiserbares Objekt übergeben wurde, wird eine Exception geworfen.
Ansonsten sollte die Funktion, sowie die Benutzung dieser eigentlich für sich sprechen. Kommentare sind natürlich gern gesehen und können unter dem Artikel erstellt werden. 🙂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/// <summary> /// Perform a deep Copy of the object. /// </summary> /// <typeparam name="T">The type of object being copied.</typeparam> /// <param name="source">The object instance to copy.</param> /// <returns>The copied object.</returns> public static T Clone<T>(T source) { if (!typeof(T).IsSerializable) { throw new ArgumentException("The type must be serializable.", "source"); } // Don't serialize a null object, simply return the default for that object if (ReferenceEquals(source, null)) { return default(T); } IFormatter formatter = new BinaryFormatter(); Stream stream = new MemoryStream(); using (stream) { formatter.Serialize(stream, source); stream.Seek(0, SeekOrigin.Begin); return (T)formatter.Deserialize(stream); } } |
Ein Kommentar