我在这里创建了一个通用类是我的代码
using System;
public class Node<T>
{
T data;
Node<T> link;
public Node(T data, Node<T> link)
{
this.data = data;
this.link = link;
}
public void Write()
{
Console.WriteLine("Data : " + this.data , this.link);
}
}
class Program
{
static void Main()
{
Node<string> node1 = new Node<string>("Some", null);
Node<string> node2 = new Node<string>("Thing", node1);
node1.Write();
node2.Write();
//to write on the console
Console.ReadKey();
}
}
我只是感到困惑,或者我的语法错误。请告诉我
所以我写了
node1.Write()
node2.Write()
输出应该是
节点1
一些
节点2
有些事
我是对还是不对?请赐教。
答案 0 :(得分:2)
不使用递归或覆盖ToString
方法的HimBromBeere答案的替代方法是将Write
函数更改为:
public void Write()
{
Console.Write("Data: ");
Console.Write($"{data}");
var next = link;
while(next != null)
{
Console.Write($", {link.data}");
next = next.link;
}
}
答案 1 :(得分:1)
由于您的link
- 属性类型为Node
且Console.WriteLine
将使用类型ToString
- 方法,以便将您的类的实例打印到控制台,应该覆盖object.ToString
:
class Node<T>
{
public override string ToString()
{
return $"{ this.data }, { this.link?.ToString() }";
}
}
如果你不这样做,Console.WriteLine
将会回到object.ToString
,这只会返回MyNamespace.Node'1'
之类的内容。
在你的Write
方法中,您也可以称之为:
public void Write()
{
Console.WriteLine("Data: " + ToString());
}