我在类上应用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/