ref not working -不改变属性
本文关键字:改变 属性 not working ref | 更新日期: 2023-09-27 18:12:10
我正在使用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
时,例如根会在第一次插入期间改变。然而,事实并非如此。根仍然为空。我怀疑这与属性以及它如何与ref而不是ref本身相互作用更相关?
您正在修改本地根变量,因为这是您传入的引用。如果你想让它工作,你需要把它重新分配给Root属性,像这样:
public T Insert(T val)
{
BinaryNode<T> root = Root;
var result = Insert(ref root, val);
Root = root;
return result;
}
也许一个更简洁的选择是直接为属性使用一个后备字段,像这样:
BinaryNode<T> _root;
public BinaryNode<T> Root
{
get { return _root; }
set { _root = value; }
}
public T Insert(T val)
{
return Insert(ref _root, val);
}