Вы должны переопределить 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());
Использование отражения выше не очень хорошо для высокопроизводительного кода, поэтому не используйте его в производственном сценарии, где требуется высокая производительность.