2016-06-08 6 views
2

Ich dachte, dass eine Liste Referenzen von Objekten enthält, also dachte ich, ich könnte ein Objekt meiner eigenen benutzerdefinierten Klasse namens "Node" erstellen, fügen Sie es zu einer Liste und später löschen Sie die Objekt, indem Sie es mit null zuweisen. (Ich weiß, dass ich das Entfernen aus der Liste verwenden könnte, aber das ist nicht das, was ich tun möchte.) Wenn ich die Liste erneut drucke, druckt es immer noch mit dem Namen des Objekts "testNode", obwohl ich es mit null zugewiesen habe. Was kann ich tun, um einen Verweis auf eine Liste hinzuzufügen?Wie kann ich einen Verweis auf eine Liste hinzufügen?

Node testNode = new Node("Name", id); 
List<Node> listNodes = new List<Node>(); 
listNodes.Add(testNode); 

for (int i = 0; i < listNodes.Count; i++) 
    listNodes[i].ToString(); 

testNode = null; 

for (int i = 0; i < listNodes.Count; i++) 
    listNodes[i].ToString(); 
+2

die Frage im Titel zu beantworten, sind Sie schon. testNode ist ** auch ** eine Referenz, so dass Sie die testNode ** Referenz ** auf null gesetzt haben. Das eigentliche Objekt ist immer noch da und es wird auf die andere Referenz (Ihre Liste) gezeigt, so dass es unverändert bleibt – Liam

Antwort

4

Was Sie zur Liste hinzuzufügen ist ein Verweis auf diese Instanz von Node. Kein Hinweis auf Ihre Variable.

Mit

testNode = null; 

Sie nur null auf Ihre Variablen zuweisen. Dies wirkt sich nicht auf die reelle Instanz testNode aus. Und es ändert nicht die Liste oder entfernen Sie die Referenz aus der Liste.

So ist der einzige Weg, um entfernen Sie den Verweis aus der Liste ist - gut - Remove:

listNodes.Remove(testNode); 
+0

Vielen Dank! Ich erreichte das, was ich tun wollte, indem ich die Mitgliedsvariablen des Knotens änderte. Als ich "testNode.type = null" schrieb, änderte sich das im zweiten Ausdruck der Liste. – Southgarden116