Feedback

C# - Dictionary kopieren

Veröffentlicht von am 18.02.2014
(0 Bewertungen)
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.

Aufruf
Zum 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 Werttypen
Wenn 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 Namespaces
System
System.Collections.Generic
System.Linq

Getestete Plattformen
Konsole, .NET 4.5
Die benutzen Typen sind ab .NET 3.5 verfügbar.
Snippet in VB übersetzen
/// <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));
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!