在linkedlistnode上添加扩展方法

本文关键字:方法 扩展 linkedlistnode 添加 | 更新日期: 2023-09-27 17:52:58

我想创建一个简单的方法来让我的链表像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;
    }
}

在linkedlistnode上添加扩展方法<T>

  1. 确保您将此扩展类的命名空间添加到您正在使用的代码
  2. 类默认是内部的,所以如果你从另一个项目使用这个扩展方法,把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;
    }
}