簡體   English   中英

我的類應該實現哪種接口或方法以在Console.WriteLine中打印我想要的內容?

[英]What interface or method should my class implement to print what I want in Console.WriteLine?

我有一個類F的對象。我想使用Console.WriteLine輸出對象的內容,以進行快速和骯臟的狀態更新,如下所示:

Console.WriteLine(objectF);

這僅將類的名稱輸出到控制台:

F

我想以某種方式重載它,以便我可以打印出一些有關對象及其屬性的有用信息。

我已經有了一個解決方法:在類中重載ToString方法,然后調用:Console.WriteLine(objectF.ToString());。

但是我寧願使用更簡單的語法。 有任何想法嗎?

Console.WriteLine(objectF)

如果您重載ToString ,則應該工作。 當框架需要將對象轉換為字符串表示形式時,它將調用ToString

public override string ToString()
{
    // replace the line below with your code
    return base.ToString();
}

您應該重寫ToString(),盡管在某些情況下,您可能會發現以下代碼很有用:

public static class ObjectUtility
{
    public static string ToDebug(this object obj)
    {
        if (obj == null)
            return "<null>";

        var type = obj.GetType();
        var props = type.GetProperties();

        var sb = new StringBuilder(props.Length * 20 + type.Name.Length);
        sb.Append(type.Name);
        sb.Append("\r\n");

        foreach (var property in props)
        {
            if (!property.CanRead)
                continue;
            // AppendFormat defeats the point
            sb.Append(property.Name);
            sb.Append(": ");
            sb.Append(property.GetValue(obj, null));
            sb.Append("\r\n");
        }

        return sb.ToString();
    }
}

用法是僅包含包含ObjectUtility的名稱空間,然后...

var f = new F();
Console.WriteLine(f.ToDebug());

上面的反射用法對高性能代碼不是很好,因此請不要在需要高性能的生產場景中使用它。

我將繼續使用ToString()。 這就是現有的目的。 另外,除非您有格式字符串,否則只需編寫以下內容:

Console.WriteLine(objectF)

我找到了問題的原因。 我忽略了將ToString()的實現定義為重寫 正確的語法是:

public override string ToString()
{
   ///Do stuff...
   return string;
}

感謝下面的海報使我走上正軌

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM