c# - 可以访问属性的子 "DebuggerDisplay"属性吗?

标签 c# .net visual-studio debugging debuggerdisplay

当前状态

有两个类:

[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/

相关文章:

c# - 有没有办法指定 where T :new() restriction but with internal constructor?

C# 更改特定行的背景颜色

c# - 如何使用 AutoFixture 获取不同的日期 (yyyy-mm-dd)

c# - FireBird .net 提供商 64 位

c# - Response.End() 后刷新页面内容

c# - 转到使用源代码实现链接

c# - 解析具有可点击内容页面的 pdf 文件

sql - 如何解决 Linq to SQL 对 DeleteAllOnSubmit 中的每个项目使用单独的 SQL DELETE 语句这一事实

c# - 更改 Visual Studio 2015 Community 的内置项目模板

c++ - 无法为数组指定显式初始值设定项