簡體   English   中英

c#如何鏈接2個LinkedListNode?

[英]c# how to link 2 LinkedListNode?

我創建了一個Linked列表和幾個節點,我想鏈接那些節點,不斷收到此錯誤消息。

屬性或索引器System.Collections.Generic.LinkedListNode <>。下一個無法分配給它是只讀的。

        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

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

遺憾的是,.NET中的LinkedListNode<T>類不允許您直接更改NextPrevious屬性,因為它們沒有set訪問器。

如果要更改列表的順序,還需要使用“ 刪除”方法從之前的位置刪除項目。 我推薦以下表格:

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);

您可以將其更改為插入而不是之前插入。

您不必鏈接它們。 當您調用AddFirst方法時,它會自動將它們鏈接到第一個節點,然后該節點成為第二個節點。

您正在嘗試將項目添加到其他項目,但您應該將它們添加到您已經在執行的LinkedList本身:

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

你想改變他們的訂單嗎? 看起來只能在添加它們時才能完成,基於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到第二個元素)元件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM