我创建了一个链接列表和几个节点,我想链接这些节点,不断收到此错误消息。
” 属性或索引器System.Collections.Generic.LinkedListNode<> .Next无法分配给它是只读的。 “
var link = new LinkedList<int>();
var node1 = new LinkedListNode<int>(1);
var node2 = new LinkedListNode<int>(2);
var node3 = new LinkedListNode<int>(3);
link.AddFirst(node1);
link.AddFirst(node2);
link.AddFirst(node3);
node1.Next = node2; ---> .next is read only
node2.Next = node3; ---> .next is read only
答案 0 :(得分:7)
您需要使用列表中的AddAfter或AddBefore方法。使用这些,您可以直接在给定项目之前或之后插入项目。
不幸的是,.NET中的LinkedListNode<T>
类不允许您直接更改Next
和Previous
属性,因为它们没有set
访问者。< / p>
如果您想更改列表的顺序,您还需要使用Remove方法从之前的位置删除该项目。我推荐以下表格:
LinkedListItem<T> foo = /*fetch your item here*/
LinkedListItem<T> bar = /*the one to come right after foo,
as a result of running the code*/
list.Remove(foo);
list.AddBefore(bar, foo);
您可以将其更改为插入而不是之前插入。
答案 1 :(得分:5)
您不必链接它们。当您调用AddFirst方法时,它会自动将它们链接到第一个节点,然后该节点成为第二个节点。
答案 2 :(得分:3)
您正在尝试将项目添加到其他项目,但您应该将它们添加到您已经在做的LinkedList
本身:
link.AddFirst(node1);
link.AddFirst(node2);
link.AddFirst(node3);
您是否正在尝试更改订单?看起来只能在添加时才能完成,基于the methods available on LinkedList<T>
。所以你想要做这样的事情:
link.AddFirst(node1);
link.AddAfter(node1, node2);
link.AddAfter(node2, node3);
或者,在您的情况下,只需将调用顺序转换为.AddFirst()
即可生成相同的结果:
link.AddFirst(node3);
link.AddFirst(node2);
link.AddFirst(node1);
这会将node3
添加到列表的开头,然后将node2
添加到列表的开头(将node3
推送到第二个元素),然后添加node1
}到列表的开头(将node3
推送到第三个元素,将node2
推送到第二个元素。)