当前状态
有两个类:
[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
处显示的工具提示值是
One = 5, two = {DebuggerDisplayTest.B}
目标
我想要的是类似的东西
One = 5, two = 'Three = 10'
我知道这可以通过覆盖 B
类的 ToString()
方法来实现。这感觉不对,因为我在我的应用程序中编写代码仅用于调试。
我也知道使用类似于
的字符串[DebuggerDisplay(@"One = {One}, two = 'Three = {Two.Three}'")]
也可以。这对我来说也不合适,因为它需要 A
类具有 B
类的知识。
我希望有更多的方法来“注入(inject)”DebuggerDisplay
的值B
类型的实例到 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();
}
}
}
最佳答案
从 OP 复制了可能的解决方案
可能,根据这个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# - 可以访问属性的子 "DebuggerDisplay"属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17297439/