gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:49:30 25 4
gpt4 key购买 nike

当前状态

有两个类:

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com