[英]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.