【发布时间】:2013-06-22 06:09:07
【问题描述】:
当前状态
有两个类:
[DebuggerDisplay(@"One = {One}, two = {Two}")]
public class A
{
public int One { get; set; }
public B Two { get; set; }
}
[DebuggerDisplay(@"Three = {Three}")]
public class B
{
public int Three { get; set; }
}
使用它们:
var a = new A {One = 5, Two = new B {Three = 10}};
在调试器内部,a 处显示的工具提示值是
一 = 5,二 = {DebuggerDisplayTest.B}
目标
我想要的是类似的东西
一 = 5,二 = '三 = 10'
我知道这可以通过覆盖B 类的ToString() 方法来实现。这感觉不对,因为我在我的应用程序中编写代码仅用于调试。
我也知道使用类似于
的字符串[DebuggerDisplay(@"One = {One}, two = 'Three = {Two.Three}'")]
也可以。这对我来说也不合适,因为它要求 A 类具有 B 类的知识。
我希望有更多方法可以将B 类型的DebuggerDisplay 的值“注入”到A 类中该类型的实例。
问题
是否可以通过某种方式访问“has-a”复合类的 DebuggerDisplay 属性中成员的 DebuggerDisplay 属性?
更新
根据this SO answer,我的要求可能是不可能的。也许一个好的解决方案是在类B 中覆盖ToString 并执行一些if..else 并使用Debugger.IsAttached property 仅在调试器内部表现不同。
类似:
[DebuggerDisplay(@"Three = {Three}")]
public class B
{
public int Three { get; set; }
public override string ToString()
{
if (Debugger.IsAttached)
{
return string.Format(@"Three = {0}", Three);
}
else
{
return base.ToString();
}
}
}
【问题讨论】:
标签: c# .net visual-studio debugging debuggerdisplay