在查看 MSDN 上的“使用 DebuggerDisplay 属性”文章后,他们建议您可以覆盖类的 ToString() 函数作为替代选项,而不是使用 DebuggerDisplay 属性。覆盖 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; }
}
}