J'ai un problème très étrange. Fondamentalement, j'ai créé une classe appelée TreeNode qui représente un nœud dans un arbre. Je crée ensuite l'arbre en ajoutant tous les nœuds à une liste.C# objet perd la référence lorsqu'il est retiré de la liste
class TreeNode
{
private TreeNode parent, lChild, rChild;
private int key, val;
public int Key
{
get { return key; }
set { key = value; }
}
public int Val
{
get { return val; }
set { val = value; }
}
public TreeNode Parent
{
get { return parent; }
set { parent = value; }
}
public TreeNode LChild
{
get { return lChild; }
}
public TreeNode RChild
{
get { return rChild; }
}
public TreeNode(int k, int v)
{
key = k;
val = v;
}
public void SetChild(TreeNode leftChild, TreeNode rightChild)
{
this.lChild = leftChild;
this.rChild = rightChild;
}
public bool isLeaf()
{
if (this.lChild == null && this.rChild == null)
{
return true;
} else
{
return false;
}
}
public bool isParent()
{
if (this.parent == null)
{
return true;
}
else
{
return false;
}
}
public void SetParent(TreeNode Parent)
{
this.parent = Parent;
}
}
Donc, si je mets un point d'arrêt juste après la création de l'arbre et survolez la liste dans Visual Studio, je peux voir la structure de l'arbre - avec toutes les références fonctionnent parfaitement de la racine jusqu'aux feuilles .
Si toutefois je fais ce qui suit:
TreeNode test = newTree[newTree.Count - 1];
s'il vous plaît noter:
private List<TreeNode> newTree = new List<TreeNode>();
qui retourne le nœud racine - et survolez encore, je peux faire un niveau plus bas (l'enfant gauche ou à droite enfant) mais ces enfants n'ont pas de références pour leurs enfants après cela. Je me demande si je perds la référence en mémoire pour les autres nœuds de la liste car le nœud de test ne fait pas partie de la liste?
Toute aide serait grandement appréciée.
Merci Tom
C'était je pense aussi. –
Salut, je m'excuse de ne pas être plus clair ... 'newtree' est une liste de TreeNode - convention de nommage stupide je sais, j'étais juste paresseux. donc le code est correct, merci – TomP89