【问题标题】:c# how to link 2 LinkedListNode?c#如何链接2个LinkedListNode?
【发布时间】:2013-07-05 21:06:30
【问题描述】:

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

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

【问题讨论】:

  • 如果你去定义.Next,你会看到它只有一个GET访问器。不能分配给它。公共 LinkedListNode 下一个 { 获取; }

标签: c# c#-4.0 c#-3.0


【解决方案1】:

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

不幸的是,.NET 中的 LinkedListNode&lt;T&gt; 类不允许您直接更改 NextPrevious 属性,因为它们没有 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);

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,但假设她想在列表中间有一个新节点?
    • @Renan 那他应该用Insert方法
    • @Renan insert,我的意思是linked list的插入方法。例如。 AddAfterAddBefore.
    【解决方案3】:

    您正在尝试将项目添加到其他项目,但您应该将它们添加到 LinkedList 本身,您已经在这样做:

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

    你想改变他们的顺序吗?看起来只有在添加它们时才能做到这一点,基于the methods available on LinkedList&lt;T&gt;。所以你会想做这样的事情:

    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 推送到第二个元素)。

    【讨论】:

    • 您也可以Remove 列表中的一个项目,然后使用AddBeforeAddAfter 将其再次添加到另一个位置。
    • @Renan:确实,在列表中的各种添加和删除方法之间,可以根据需要进行排序。看来 OP 只是想通过编辑项目本身来改变项目的位置,这是行不通的。
    猜你喜欢
    • 2011-07-26
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多