为什么我不能在函数中实例化一个对象

V.L*_*rie 1 c#

基本上我有一个NodeTree类:

public class NodeTree
{
    public NodeTree(int value, NodeTree left, NodeTree right)
    {
        Value = value;
        Right = right;
        Left = left;
    }

    public int Value { get; set; }
    public NodeTree Right { get; set; }
    public NodeTree Left { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的主要部分,我想做点什么

NodeTree root = null;
Algo.InsertValueIt(root, 8);
Run Code Online (Sandbox Code Playgroud)

InsertValueIt()是我的静态类Algo中的一个方法,它执行:

 public static void InsertValueIt(NodeTree root, int val)
    {
        var newNode = new NodeTree(val, null, null);
        if (root == null)
        {
            root = newNode;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我的方法中,一切都按预期工作,但回到我的主要,我的对象根仍然是空的.我感到困惑的原因是我给我的方法一个引用,所以它应该将地址的值修改为我分配的新空间.

我想我可以通过返回一个NodeTree来解决我的问题,但有没有办法用void返回类型做到这一点?

Zby*_*000 5

您需要定义要通过引用传递的参数,以便修改原始值(请注意ref关键字):

public static void InsertValueIt(ref NodeTree root, int val) {
    ...
Run Code Online (Sandbox Code Playgroud)

同样在调用方法时,您需要使用以下标记来标记参数ref:

Algo.InsertValueIt(ref root, 8);
Run Code Online (Sandbox Code Playgroud)

...否则您只修改该功能中的本地副本.