Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调试程序显示在泛型类上_C#_.net_Visual Studio_Debugging - Fatal编程技术网

C# 调试程序显示在泛型类上

C# 调试程序显示在泛型类上,c#,.net,visual-studio,debugging,C#,.net,Visual Studio,Debugging,在泛型类上应用DebuggerDisplay属性时出现问题: [DebuggerDisplay("--foo--")] class Foo { } [DebuggerDisplay("Bar: {t}")] class Bar<T> { public T t; } [DebuggerDisplay(“--foo-->”) 福班 { } [调试器显示(“条:{t}”)] 分类栏 { 公共交通; } 当检查类型为Bar的对象时,我希望它显示为Bar:--foo--,但我得到

在泛型类上应用
DebuggerDisplay
属性时出现问题:

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

[DebuggerDisplay("Bar: {t}")]
class Bar<T>
{
    public T t;
}
[DebuggerDisplay(“--foo-->”)
福班
{
}
[调试器显示(“条:{t}”)]
分类栏
{
公共交通;
}
当检查类型为
Bar
的对象时,我希望它显示为
Bar:--foo--
,但我得到
Bar:{foo}


我做错了什么?

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

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


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

您可以使用
[DebuggerDisplay(“Bar,nq}”)]//nq-无引号

您还可以使用以下做法:

[免责声明:我与OzCode有关联]

您可以使用OzCode的显示功能,该功能支持嵌套/递归调试信息。

一旦为实例定义了它,它将自动用于该类型的所有实例。

谢谢!所以我想这与通用无关。我会选择ToString解决方案。我相信它应该是:
[DebuggerDisplay(“Bar”)]