私はrefを使って作成しようとしているバイナリ検索ツリーのルートを変更しますが、意図したとおりに動作しません。refは機能しません - プロパティは変更されません
public BinaryNode<T> Root { get; set; }
public BinaryTree() : base()
{
Root = null;
public T Insert(ref BinaryNode<T> root, T val)
{
// Insert here
if (root == null)
{
BinaryNode<T> newNode = new BinaryNode<T>(val);
root = newNode;
Size++;
return val;
}
if (val.CompareTo(root.Data) < 0)
{
BinaryNode<T> left = root.LeftChild;
return Insert(ref left, val);
}
else if (val.CompareTo(root.Data) > 0)
{
BinaryNode<T> right = root.RightChild;
return Insert(ref right, val);
}
return val;
}
public override T Insert(T val)
{
BinaryNode<T> root = Root;
return Insert(ref root, val);
}
私は私が行うときroot = newNode
ことは、例えばルートが最初のインサート中に変更することを期待していました。しかし、そうではありません。その後もRootはnullのままです。私はこれがプロパティにもっと関連するものであり、ref自体ではなくrefとどのように相互作用するのか疑問に思っています。それはあなたが渡している参照ですので、あなたは、ローカルルート変数を変更している
だけでデバッグポイントを入れて、期待どおりに働いていない理由を確認し、それが参照型が作る、修正を試してみてください –
作業方法に関係していますヌルが未定義であるため、ルートプロパティはnullではありませんce –