MSDNの「 DebuggerDisplay属性の使用」の記事を確認した後、 DebuggerDisplay属性を使用するのではなく、代替オプションとしてクラスのToString()関数をオーバーライドできることが示唆されています。ToString()メソッドをオーバーライドしても、Beanは非表示になりません。
C#オブジェクトにオーバーライドされたToString()がある場合、デバッガーはオーバーライドを呼び出し、標準の{}の代わりにその結果を表示します。したがって、ToString()をオーバーライドした場合は、DebuggerDisplayを使用する必要はありません。両方を使用する場合、DebuggerDisplay属性はToString()オーバーライドよりも優先されます。
クラスのToString()メソッドをオーバーライドできますか、それとも他の目的で使用していますか?
あなたがすでにこれを検討したかどうかはわかりませんが、それが役立つ場合に備えて提案したいと思いました。:-)
完全を期すために、他の誰もがすぐにそれをモックアップできるようにします。これが私が作った簡単な例です:
namespace StackOverflow
{
//broken BeanPouch class that uses the DebuggerDisplay attribute
[System.Diagnostics.DebuggerDisplay("Count = {Count}")]
class BrokenBeanPouch : List<MagicBean>
{ }
//working BeanPouch class that overrides ToString
class WorkingBeanPouch : List<MagicBean>
{
public override string ToString()
{
return string.Format("Count = {0}", this.Count);
}
}
class Program
{
static WorkingBeanPouch myWorkingBeans = new WorkingBeanPouch()
{
new MagicBean() { Value = 4.99m }, new MagicBean() { Value = 5.99m }, new MagicBean() { Value = 3.99m }
};
static BrokenBeanPouch myBrokenBeans = new BrokenBeanPouch()
{
new MagicBean() { Value = 4.99m }, new MagicBean() { Value = 5.99m }, new MagicBean() { Value = 3.99m }
};
static void Main(string[] args)
{
//break here so we can watch the beans in the watch window
System.Diagnostics.Debugger.Break();
}
}
class MagicBean
{
public decimal Value { get; set; }
}
}