Arbeit habe ich eine Klasse Knoten wie folgt:C# Objektinstanz nicht richtig
public class Node
{
public Dictionary<string, string> dictionary;
public Node(Dictionary<string, string> dictionary)
{
this.dictionary = dictionary;
}
public void CreateNode()
{
this.dictionary.Add("1", "String1");
Dictionary<string, string> dictionary1 = new Dictionary<string, string>();
Console.WriteLine(this.dictionary["1"]);
Node tmp = new Node(dictionary1);
tmp.dictionary = this.dictionary;
Console.WriteLine(tmp.dictionary["1"]);
tmp.AddE(tmp, "String2","2");
Console.WriteLine(this.dictionary["2"]);
}
public void AddE(Node tmp,String text,string c)
{
tmp.dictionary.Add(c,text);
}
}
Knoten hat ein Wörterbuch mit String-Schlüssel und Wert, einen Konstruktor mit Parameter, ein Verfahren CreateNode() Das fügt dem Wörterbuch ein Element hinzu und erstellt ein weiteres Knoten. Nun, nach tmp.dictionary = this.dictionary; ein weiterer Artikel wird um tmp.dictionary hinzugefügt, aber es ist auch bei this.dictionary hinzugefügt (Ich will das nicht passieren, ich vermisse smth).
Hauptmethode:
static void Main(string[] args)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
Node n = new Node(dictionary);
n.CreateNode();
}
Ausgang ist:
String1
String1
String2
Für diese Codezeile Console.WriteLine (this.dictionary [ "2"]); sollte es diesen Fehler zeigen KeyNotFoundException: Der angegebene Schlüssel war nicht im Wörterbuch vorhanden., weil ich kein Element mit Schlüssel "2" um this.dictionary hinzugefügt habe. Hoffe ich habe mich klar gemacht.
Ihr Code ist * wirklich * verschleiert. Die Tatsache, dass Sie zwei verschiedene Wörterbücher eingebunden haben und dass Sie eine Instanzmethode in 'Node' haben, die einen anderen' Node' akzeptiert, aber nichts mit dem Ziel des Methodenaufrufs tut, verwirren die Dinge massiv. –
Asteam bitte fügen Sie keine Antwort in Frage - wenn Sie der Meinung sind, dass vorhandene Antworten das Problem nicht gelöst haben, schreiben Sie Ihre eigene Antwort als separate Antwort –
Und nur Code wäre nicht wirklich eine Antwort darauf, warum Sie das aktuelle Verhalten sowieso sehen. –