繁体   English   中英

如何在 C# 中的覆盖 ToString 方法中包含 void 方法

[英]how to include a void method in override ToString method in C#

好的,所以我试图在重写 ToString 方法中写出一个列表。 我考虑过可能与代表一起做,但代表要求方法是 static,我不想让它成为 static。

请查看下面的代码,并帮助我解决可能的其他任何方式:

private void Print()
    {
        foreach(var i in Lista)
        {
            Console.Write(i);
        }
    }


    public override string ToString()
    {
        return base.ToString() + Print();
    }

它给了我一个错误“运算符 + 不能应用于字符串和 void 类型的操作数”

感谢您的任何帮助!

在您的代码中,方法 Print 被声明为无效。 因此它不能与base.ToString()的返回值串联使用。 相反,您可以更改 Print 以返回一个字符串,然后您可以从覆盖中调用它

例如:

private string Print()
{
    StringBuilder sb = new StringBuilder();
    foreach(var i in Lista)
    {
        sb.Append(i);
        // or sb.AppendLine(i) if you want a newline added
    }
    return sb.ToString();
}


public override string ToString()
{
    return base.ToString() + Print();
}

当然,此解决方案不会将任何内容打印到控制台。 相反,它返回一个字符串,调用者可以决定 output 到控制台或写入文件。 不要将通用 class 绑定到其 output 介质。 (除非 class 本身的 scope 是 output 其内容到控制台/文件/打印机/等...)。

您可以只取消该方法并返回给调用者:

private List<string> Lista = new List<string> { "one", "two", "three" };

public override string ToString()
{
   return $"{base.ToString()} {String.Join(',', Lista)}";
}

如果你真的想打印到控制台:

private void Print()
{
    Lista?.ForEach(x => { Console.Write($"{x} "); });
}

public override string ToString()
{
    Print();
    return base.ToString();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM