Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应该添加到列表开头的简单C#节点列表函数不';不能作为外部静态空隙工作_C#_List - Fatal编程技术网

应该添加到列表开头的简单C#节点列表函数不';不能作为外部静态空隙工作

应该添加到列表开头的简单C#节点列表函数不';不能作为外部静态空隙工作,c#,list,C#,List,嗨,伙计们,我写了有史以来最简单的代码,我尝试了两件事,我甚至从网上复制,但我不知道为什么它不起作用。。。 这是我的代码: public static void insertToStart(Node<T> list, T toAdd) { list = new Node<T>(toAdd, list); } public static void insertToStart2(Node<T> list, T toAdd)

嗨,伙计们,我写了有史以来最简单的代码,我尝试了两件事,我甚至从网上复制,但我不知道为什么它不起作用。。。 这是我的代码:

 public static void insertToStart(Node<T> list, T toAdd)
    {
        list = new Node<T>(toAdd, list);
    }
public static void insertToStart2(Node<T> list, T toAdd)
    {
        Node<T> list2 = new Node<T>(toAdd, list);
        list = list2;
    }
公共静态void insertToStart(节点列表,T toAdd)
{
列表=新节点(toAdd,list);
}
公共静态void insertToStart2(节点列表,T toAdd)
{
节点列表2=新节点(toAdd,list);
列表=列表2;
}
两者都不起作用,我也不知道为什么。。。 这是主要代码:

Service<int>.insertToStart(list, 600); 
Service<int>.insertToStart2(list, 600);
Service.insertToStart(列表,600);
服务。insertToStart2(列表,600);

谢谢大家!

此操作不起作用的原因是,您试图将一个新的
节点
对象分配给
列表
,这是一个按值传递的参数。此类修改仅在进行修改的方法中可见,但对调用方中作为
list
传递的变量没有影响

例如,您可以通过要求通过引用传递
list
,即标记
list
参数a
ref
,来解决此问题:

public static void insertToStart(ref Node<T> list, T toAdd)
{
    list = new Node<T>(toAdd, list);
}
publicstaticvoidinserttostart(参考节点列表,T添加)
{
列表=新节点(toAdd,list);
}

然而,这种解决方案并不理想。更好的方法是将
节点
封装在
节点列表
类中,并将头部存储为私有字段,这样您就根本不需要通过
列表

谢谢!但是为什么呢?为什么我可以在没有“ref”的情况下添加到末尾、对其进行排序、对其进行完全更改,但在这里我必须这样做?@NegevAsaf严格来说,排序和添加到后面也不起作用:如果列表为空,则添加到后面将失败,而当需要移动初始元素时,排序将失败。撇开这些“褶皱”不谈,其他方法工作的原因是,
Node
是对可变对象的引用,并且您的方法修改此对象的属性,而不使用新对象替换整个对象。