gpt4 book ai didi

c# - 泛型类上的 DebuggerDisplay

转载 作者:可可西里 更新时间:2023-11-01 08:05:24 25 4
gpt4 key购买 nike

我在应用 DebuggerDisplay 时遇到问题通用类的属性:

[DebuggerDisplay("--foo--")]
class Foo
{
}

[DebuggerDisplay("Bar: {t}")]
class Bar<T>
{
public T t;
}

检查类型为 Bar<Foo> 的对象时我希望它显示为 Bar: --foo-- , 但我得到 Bar: {Foo}

我做错了什么?

最佳答案

DebuggerDisplay 属性不是递归的。字符串中的 {} 本质上表示计算此表达式并内联显示结果。计算内部结果的字符串时,就好像类型或成员的播放中没有 DebuggerDisplay 属性一样。这就是为什么您看到 {Foo} 而不是 --foo-- 的原因。

这样做的原因是可靠性。具有相互递归的 DebuggerDisplay 属性标签太容易了。这会导致在评估内部表达式时发生堆栈溢出或无限循环。不递归地评估 DebuggerDisplay 属性可以防止这种无限递归(尽管用户仍然很可能在特定表达式中自己创建它)。

控制内部表达式显示方式的一种方法是覆盖 .ToString() 方法。这将在计算内部表达式的显示字符串时进行评估。

关于c# - 泛型类上的 DebuggerDisplay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/258917/

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