簡體   English   中英

在LinkedListNode上添加擴展方法<T>

[英]Adding extension methods on LinkedListNode<T>

我正在嘗試創建一種簡單的方法,使我的鏈表在C#中像一個循環鏈表。

我有此代碼,並且它不想顯示為擴展方法。 知道為什么嗎?

static class CircularLinkedList
{
    public static LinkedListNode<object> NextOrFirst(this LinkedListNode<object> current)
    {
        if (current.Next == null)
            return current.List.First;
        return current.Next;
    }

    public static LinkedListNode<object> PreviousOrLast(this LinkedListNode<object> current)
    {
        if (current.Previous == null)
            return current.List.Last;
        return current.Previous;
    }
}
  1. 確保將此擴展類的名稱空間添加到正在使用的代碼中
  2. 默認情況下,class是內部類,因此如果您正在其他項目中使用此擴展方法,則將class標記為public。
  3. 最好使用LInkedListNode<T>代替LinkedListNode<object>

碼。

public static class CircularLinkedList
{
    public static LinkedListNode<T> NextOrFirst<T>(this LinkedListNode<T> current)
    {
        if (current.Next == null)
            return current.List.First;
        return current.Next;
    }

    public static LinkedListNode<T> PreviousOrLast<T>(this LinkedListNode<T> current)
    {
        if (current.Previous == null)
            return current.List.Last;
        return current.Previous;
    }
}

您必須在課堂上指定public 您的類是內部的,並且可能是因為如果您的擴展類在另一個項目中,則您無法訪問擴展方法。

public static class CircularLinkedList
{
.....
}

要稍后使用它,請像下面這樣使用它:

LinkedListNode<object> obj = new LinkedListNode<object>(null);
obj.PreviousOrLast();

在以下應用程序中,這對我來說效果很好:

class Program
{
    static void Main(string[] args)
    {
        LinkedListNode<object> node = new LinkedListNode<object>("Hello World");
        node.NextOrFirst();
    }
}

static class CircularLinkedList
{
    public static LinkedListNode<object> NextOrFirst(this LinkedListNode<object> current)
    {
        if (current.Next == null)
            return current.List.First;
        return current.Next;
    }

    public static LinkedListNode<object> PreviousOrLast(this LinkedListNode<object> current)
    {
        if (current.Previous == null)
            return current.List.Last;
        return current.Previous;
    }
}

確保使用正確的通用類型實例化LinkedListNode,因為使用任何其他類型(即字符串)將不起作用。 但是,可以通過將代碼更改為以下內容來擴展它以支持任何類型的LinkedListNode:

class Program
{
    static void Main(string[] args)
    {
        LinkedListNode<string> node = new LinkedListNode<string>("Hello World");
        node.NextOrFirst<string>();

        LinkedListNode<int> node2 = new LinkedListNode<int>(3);
        node2.NextOrFirst<int>();
    }
}

static class CircularLinkedList
{
    public static LinkedListNode<T> NextOrFirst<T>(this LinkedListNode<T> current)
    {
        if (current.Next == null)
            return current.List.First;
        return current.Next;
    }

    public static LinkedListNode<T> PreviousOrLast<T>(this LinkedListNode<T> current)
    {
        if (current.Previous == null)
            return current.List.Last;
        return current.Previous;
    }
}

暫無
暫無

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

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