当前状态
有两个类:
[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'
我知道这可以通过覆盖ToString()
class 的方法来实现B
。这感觉不对,因为我在我的应用程序中编写代码仅用于调试。
我也知道使用类似于
[DebuggerDisplay(@"One = {One}, two = 'Three = {Two.Three}'")]
也可以。这对我来说也感觉不对,因为它要求 classA
具有 class 知识B
。
我希望有更多的方法将 type 的值“注入”DebuggerDisplay
到B
class 中该类型的实例A
。
问题
是否可以以某种方式访问“具有”复合类DebuggerDisplay
的属性内的成员属性?DebuggerDisplay
更新
根据这个 SO answer,我的要求可能是不可能的。也许一个好的解决方案是ToString
在类中重写B
并做一些if..else
并使用该Debugger.IsAttached
属性仅在调试器内部表现不同。
就像是:
[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();
}
}
}