C# 泛型类不';t打印第二个参数

C# 泛型类不';t打印第二个参数,c#,.net,C#,.net,我创建了一个泛型类这是我的代码 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() { Consol

我创建了一个泛型类这是我的代码

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();
    }
}
输出是否应该是

节点1

一些

节点2

有些事


我是对还是错??请告诉我。

由于您的
链接
-属性的类型为
节点
控制台。WriteLine
将使用类型
ToString
-方法,为了将类的实例打印到控制台,您应该覆盖
对象。ToString

class Node<T>
{
    public override string ToString()
    {
        return $"{ this.data }, { this.link?.ToString() }";
    }
}

由于您的
链接
-属性的类型为
节点
控制台。WriteLine
将使用类型
ToString
-方法将类的实例打印到控制台,您应该覆盖
对象。ToString

class Node<T>
{
    public override string ToString()
    {
        return $"{ this.data }, { this.link?.ToString() }";
    }
}

HimBromBeere回答的另一个不使用递归或重写
ToString
方法的方法是将
Write
函数更改为:

public void Write()
{
    Console.Write("Data: ");
    Console.Write($"{data}");

    var next = link;
    while(next != null)
    {
        Console.Write($", {link.data}");
        next = next.link;
    }
}

HimBromBeere回答的另一个不使用递归或重写
ToString
方法的方法是将
Write
函数更改为:

public void Write()
{
    Console.Write("Data: ");
    Console.Write($"{data}");

    var next = link;
    while(next != null)
    {
        Console.Write($", {link.data}");
        next = next.link;
    }
}


Console.WriteLine(“数据:+this.Data,this.link”)
这个链接应该打印在哪里?请阅读
string.Format
并了解
ToString
-方法以及如何重写它以打印复杂对象(例如,您的
节点
-类)。
Console.WriteLine(“数据:+this.Data,this.link.Data”)
?@HimBromBeere噢,所以我不能这样打印
一些东西一些
?@Lucifer将其更改为这个
控制台。WriteLine(“数据:“+this.Data”)
Console.WriteLine(“数据:+this.Data,this.link”)
这个链接应该打印在哪里?请阅读
string.Format
并了解
ToString
-方法以及如何重写它以打印复杂对象(例如,您的
节点
-类)。
Console.WriteLine(“数据:+this.Data,this.link.Data”)
?@HimBromBeere噢,所以我不能这样打印
一些东西一些
?@Lucifer将其更改为这个
控制台。WriteLine(“数据:“+this.Data”)这不会编译sir这一行就是我所需要的
This.link?.ToString()
谢谢。不过,这是一个小小的警告,如果你有很多节点,你可能会遇到堆栈溢出异常。你能解释一下吗先生谢谢
This.link?.ToString()
doing@BoonMingProg它检查
link
是否为
null
,如果是,simoply返回
null
,否则调用
link.ToString
,并返回该值。只是
returnlink==null的简写?null:link.ToString()
。这将无法编译。这一行是我所需要的全部
This.link?.ToString()
谢谢。不过,这是一个小警告,如果使用递归,那么如果有很多节点,可能会出现堆栈溢出异常。请解释一下,先生谢谢
This.link?.ToString()
doing@BoonMingProg它检查
link
是否为
null
,如果是,simoply返回
null
,否则调用
link.ToString
,并返回该值。只是
returnlink==null的简写?null:link.ToString()
。这是什么,先生
$
这基本上是一种更好的
字符串处理方式。Format
现在谢谢:)这是什么,先生
$
这基本上是一种更好的
字符串处理方式。Format
现在谢谢:)