作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在应用 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/
我是一名优秀的程序员,十分优秀!