我想创建一个简单的方法来让我的链表像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;
}
}
- 确保您将此扩展类的命名空间添加到您正在使用的代码
- 类默认是内部的,所以如果你从另一个项目使用这个扩展方法,把class标记为public。
- 用
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;
}
}