Dieses Snippet ist in der Lage eine tiefe Kopie eines Wörterbuchs (Dictionary) anzufertigen. Die Methode ist als Erweiterung für den Dictionary-Typ implementiert.
AufrufZum Kopieren muss man die Methode mit 2 Funktionen zum Kopieren ausgestattet werden. z.B.:
dic.Copy(x=> new Key(x), y=> new Value(y));
Dabei wird von dem Schlüssel und von dem Wert eine neue Instanz erstellt, sprich tief kopiert.
So wird verhindert, dass wenn man einen Wert im Ursprungswörterbuch ändert, sich dieser im zuvor erstellten ebenfalls ändert.
Sonderfall: TKey und TValue sind WerttypenWenn Schlüssel- und Werte Wertetypen (Strukturen) sind, dann braucht man keine aufwendigen Kopieroperationen:
dic.Copy(x => x, y => y);
Das hat den Hintergrund, dass Werttypen keine Verweise sein können.
benötigte NamespacesSystem
System.Collections.Generic
System.Linq
Getestete PlattformenKonsole, .NET 4.5
Die benutzen Typen sind ab .NET 3.5 verfügbar.
/// <summary>
/// Erstellt eine tiefe Kopie eines Wörterbuchs.
/// </summary>
/// <typeparam name="TKey">Der Typ der Schlüssel.</typeparam>
/// <typeparam name="TValue">Der Typ der Werte.</typeparam>
/// <param name="dictionary">Das zu kopierende Wörterbuch.</param>
/// <param name="keyCopier">Eine Funktion, die eine Kopie eines Schlüssels anfertigt.</param>
/// <param name="valueCopier">Eine Funktion, die eine Kopie eines Wert anfertigt.</param>
/// <returns>Ein Wörterbuch mit den kopierten Werten aus <paramref name="dictionary"/>.</returns>
public static Dictionary<TKey, TValue> Copy<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, Func<TKey, TKey> keyCopier, Func<TValue, TValue> valueCopier)
{
return dictionary.ToDictionary(x => keyCopier(x.Key), x => valueCopier(x.Value));
}