2012-04-12 11 views
0

Wörterbuch f ist temporär und ich möchte seinen Wert in einem anderen Wörterbuch, aber sobald ich Clear() es den Wert in Wörterbuch Zeilen verloren geht, denke ich, es liefert eine Art von Verweis . Irgendeine Idee, wie man das löst?Wörterbuch der Wörterbücher verliert seinen Wert

+3

'Clear' neigt dazu, das zu tun :) – leppie

+0

Sie haben recht, es setzt einen Verweis auf das Wörterbuch innerhalb des anderen Wörterbuchs, nicht eine Kopie davon. Die Antwort beschreibt, wie mit diesem Verhalten umzugehen ist. – Servy

+1

Gibt es einen besonderen Grund, warum Sie 'Dictionary >' anstelle von 'List >' verwenden? – covertCoder

Antwort

8

Verschieben Sie die Deklaration f in Ihre Schleife. Dann werden Sie es nicht jedes Mal leeren müssen und die Referenz bleibt intakt:

Dictionary<int, Dictionary<string, string>> lines = new Dictionary<int, Dictionary<string, string>>(); 

while ((line = sr.ReadLine()) != null) 
{ 
    Dictionary<string, string> f = new Dictionary<string, string>(); 

    lineArr = line.Split(','); 
    int x = 0; 
    foreach (string field in lineArr) 
    { 
     f.Add(keys[x], field); 
     x++; 
    } 
    lines.Add(lineIndex, f); 

    lineIndex++; 
2

Die Variable f einen Verweis auf ein Dictionary<string, string> Objekt enthält. Wenn Sie es einem anderen Wörterbuch hinzufügen, erstellen Sie kein neues Objekt, sondern nur einen weiteren Verweis auf dasselbe Objekt.

Ich würde empfehlen, nur mit f = new Dictionary<string, string>() als Weg des geringsten Widerstandes hier gehen.

Verwandte Themen