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