应该添加到列表开头的简单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
参数aref
,来解决此问题:
public static void insertToStart(ref Node<T> list, T toAdd)
{
list = new Node<T>(toAdd, list);
}
publicstaticvoidinserttostart(参考节点列表,T添加)
{
列表=新节点(toAdd,list);
}
然而,这种解决方案并不理想。更好的方法是将
节点
封装在节点列表
类中,并将头部存储为私有字段,这样您就根本不需要通过列表
。谢谢!但是为什么呢?为什么我可以在没有“ref”的情况下添加到末尾、对其进行排序、对其进行完全更改,但在这里我必须这样做?@NegevAsaf严格来说,排序和添加到后面也不起作用:如果列表为空,则添加到后面将失败,而当需要移动初始元素时,排序将失败。撇开这些“褶皱”不谈,其他方法工作的原因是,Node
是对可变对象的引用,并且您的方法修改此对象的属性,而不使用新对象替换整个对象。