簡體   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