2016-06-16 8 views
1

Meine Titelfrage bestanden ist absolut die gleiche wie this questionWörterbuch verliert Werte, wenn sie als Parameter

aber das ist nicht meine Frage nicht beantworten. Auch

static void Main() { 
    Dictionary<string,int> d=new Dictionary<string,int>(); 
    d["asu"]=1; 
    d["babi"]=1; 
    c(d); 
    Console.Write(d["asu"]); 
    //output=0 
} 
static void c(Dictionary<string,int> d){ 
    d["asu"]--; 
} 

Der obige Code einen Wert in d Variable innerhalb Main Verfahren verringern, wenn es nur Wert innerhalb c() Methode verringern sollte und nicht im Inneren Main Verfahren verringern. Wie behalte ich die Dictionary in Main Methode so die Werte nicht durch übergebene Parameter.

+0

Bitte entfernen Sie die [Profanität] (http://meta.stackexchange.com/questions/2232/are-explettives-cursing-wear-words-or-vulgar-language-allowed-on-se-sites) – Martheen

Antwort

5

Dictionary ist ein Referenztyp. Sie erstellen keine Kopie der Daten, wenn Sie sie weitergeben. Sie übergeben nur einen Verweis auf dasselbe zugrunde liegende Objekt.

Wenn Sie eine Kopie ändern möchten, müssen Sie explizit eine Kopie erstellen; versuchen:

var copy = d.ToDictionary(t=>t.Key, t=>t.Value); 
+0

Dies ist richtig. Ein Dictionary ist ein Referenztyp. Indem Sie einen Verweis auf d an die Funktion c übergeben, geben Sie c die Möglichkeit, Ihr ursprüngliches d zu ändern. Wenn Sie dies nicht möchten, müssen Sie explizit eine neue Kopie des Wörterbuchs erstellen. –

3

eine Wörterbuch Kopie erstellen, bevor

c(new Dictionary<string, int>(d)); 

Ansonsten in Verfahren c vorbei, Variablen auf das gleiche Objekt zeigen.

Verwandte Themen