ref not working - 不改变财产

时间:2016-10-09 17:02:25

标签: c#

我正在使用ref,以便它改变我想要创建的二进制搜索树的根,但是,它没有按照我打算的方式工作。

EVP_aes_256_ctr

我期待当我 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会在第一次插入期间发生变化。然而,这种情况并非如此。 Root仍然保持null。我怀疑这是与属性更相关的内容以及它与ref的交互方式而不是ref本身?

1 个答案:

答案 0 :(得分:3)

您正在修改本地根变量,因为它是您传入的引用。如果您希望这样做,您需要将其分配回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);
}