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