1

我正在尝试创建一种简单的方法来让我的链表在 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;
    }
}
4

3 回答 3

3
  1. 确保将此扩展类的命名空间添加到您正在使用的代码中
  2. 默认情况下,类是内部的,因此如果您在另一个项目中使用此扩展方法,请将类标记为公共。
  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;
    }
}
于 2013-01-12T07:45:26.867 回答
2

您必须public与您的班级一起指定。您的类是内部的,如果您的扩展类在不同的项目中,可能是因为您无法访问扩展方法。

public static class CircularLinkedList
{
.....
}

要稍后访问它,请使用它:

LinkedListNode<object> obj = new LinkedListNode<object>(null);
obj.PreviousOrLast();
于 2013-01-12T07:41:59.953 回答
1

这在以下应用程序中对我来说很好:

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;
    }
}
于 2013-01-12T07:53:31.580 回答