これは、次のアプリケーションでうまく機能します。
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;
}
}