通用类不打印第二个参数

时间:2018-06-12 10:12:47

标签: 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()
    {
        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

  

有些事

我是对还是不对?请赐教。

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 - 属性类型为NodeConsole.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());
}