Heim >Backend-Entwicklung >C++ >Wie erstelle ich tiefe Kopien generischer Wörterbücher in .NET?

Wie erstelle ich tiefe Kopien generischer Wörterbücher in .NET?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-04 15:16:39344Durchsuche

How to Create Deep Copies of Generic Dictionaries in .NET?

Erstellen tiefer Kopien generischer Wörterbücher in .NET

Klonen oder Durchführen tiefer Kopien generischer Wörterbücher () ist wichtig, um die ursprüngliche Datenstruktur beizubehalten, ohne das Original zu beeinträchtigen. Hier sind einige Ansätze:

ToDictionary()-Methode mit flachem Klonen:

Wenn Sie nur eine flache Kopie benötigen, in der die Schlüssel- und Wertreferenzen kopiert werden, ist < see cref="System.Linq.Enumerable.ToDictionary{TSource, TKey, TElement}(IEnumerable{TSource}, Func{TSource, TKey}, Func{TSource, TElement})"/> Methode verwendet werden kann. Das folgende Beispiel zeigt eine flache Kopie:

var originalDict = new Dictionary<string, int> { { "Key1", 1 }, { "Key2", 2 } };
var shallowCopyDict = originalDict.ToDictionary(entry => entry.Key, entry => entry.Value);

ToDictionary()-Methode mit Deep Cloning:

Wenn Sie eine tiefe Kopie benötigen, bei der auch verschachtelte Objekte rekursiv kopiert werden , können Sie das verwenden. Schnittstelle zum Implementieren des Klonens für den Werttyp. Das folgende Beispiel zeigt eine tiefe Kopie mit Klonen:

class CloneableValue : ICloneable
{
    public int Value { get; set; }

    public object Clone()
    {
        return new CloneableValue { Value = this.Value };
    }
}

Dictionary<string, CloneableValue> originalDict = new Dictionary<string, CloneableValue> { { "Key1", new CloneableValue() { Value = 1 } } };
var deepCopyDict = originalDict.ToDictionary(entry => entry.Key, entry => (CloneableValue)entry.Value.Clone());

Benutzerdefinierte Klonmethode:

Alternativ können Sie eine benutzerdefinierte Klonmethode speziell für Ihre Datenstruktur erstellen. Diese Methode würde das Wörterbuch durchlaufen, neue Instanzen der Schlüssel- und Wertobjekte erstellen und die Werte entsprechend zuweisen. Hier ein Beispiel:

public static Dictionary<string, T> CloneDictionary<T>(Dictionary<string, T> originalDict)
{
    Dictionary<string, T> cloneDict = new Dictionary<string, T>();
    foreach (KeyValuePair<string, T> entry in originalDict)
    {
        cloneDict.Add(entry.Key, (T)entry.Value);
    }
    return cloneDict;
}

Die Wahl des Ansatzes hängt von der erforderlichen Klontiefe und den spezifischen Anforderungen Ihrer Anwendung ab. Das Die Methode mit geeigneten Schlüssel- und Elementselektoren bietet eine vielseitige Möglichkeit, sowohl flache als auch tiefe Kopien zu erstellen.

Das obige ist der detaillierte Inhalt vonWie erstelle ich tiefe Kopien generischer Wörterbücher in .NET?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn