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());
上記のリフレクションの使用は、高性能コードにはあまり適していないため、高性能が必要な運用シナリオでは使用しないでください。