3

我创建了一个链接列表和几个节点,我想链接这些节点,不断收到此错误消息。

" 属性或索引器 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
4

3 回答 3

7

您需要使用列表的AddAfterAddBefore方法。使用这些,您可以直接在给定项目之前或之后插入项目。

不幸的是LinkedListNode<T>,.NET 中的类不允许您直接更改NextandPrevious属性,因为它们没有set访问器。

如果要更改列表的顺序,还需要使用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);

您可以将其更改为在之后插入而不是在之前插入。

于 2013-07-05T21:09:51.880 回答
5

您不必链接它们。当您调用 AddFirst 方法时,它会自动将它们链接到第一个节点,然后成为第二个节点。

于 2013-07-05T21:10:07.987 回答
3

您正在尝试将项目添加到其他项目,但您应该将它们添加到LinkedList您已经在执行的操作中:

link.AddFirst(node1);
link.AddFirst(node2);
link.AddFirst(node3);

你想改变他们的顺序吗?看起来只有在添加它们时才能做到这一点,基于LinkedList<T>. 所以你会想做这样的事情:

link.AddFirst(node1);
link.AddAfter(node1, node2);
link.AddAfter(node2, node3);

Or, in your case, simply reversing the order of the calls to .AddFirst() will produce the same results:

link.AddFirst(node3);
link.AddFirst(node2);
link.AddFirst(node1);

This would add node3 to the start of the list, then add node2 to the start of the list (pushing node3 to the second element), then add node1 to the start of the list (pushing node3 to the third element and node2 to the second element).

于 2013-07-05T21:13:28.267 回答