2008-10-09 62 views
1

我有F級的對象我想輸出使用Console.WriteLine像這樣快速和骯髒的狀態更新的對象的內容:我的類應該使用什麼接口或方法來在Console.WriteLine中打印我想要的內容?

Console.WriteLine(objectF);

這打印出只有類的名字到控制檯:

F 

我想以某種方式過載,這樣我可以代替輸出有關對象及其屬性一些有用的信息。

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

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

回答

6

Console.WriteLine(objectF)

應該工作,如果你超載ToString。當框架需要將對象轉換爲字符串表示形式時,它會調用ToString

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

我會繼續使用ToString()。這是它存在的目的。另外,除非你有一個格式字符串,你可以寫:

Console.WriteLine(objectF) 
1

我發現我的問題的原因。我忽略了將ToString()的實現定義爲覆蓋。正確的語法是:

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

感謝下面誰把我在正確的軌道上的海報

2

您應該重寫的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()); 

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

相關問題