使用 DebuggerTypeProxy 特性

DebuggerTypeProxyAttribute 指定类型的代理(或替身),并更改类型在调试器窗口中的显示方式。 查看具有代理的变量时,代理将代替原始类型出现在**“显示”**中。 调试器变量窗口仅显示代理类型的公共成员。 不显示私有成员。

此特性可应用于:

  • 结构

  • 程序集

类型代理类必须有一个构造函数,该函数将代理所替换的类型作为参数。 在每次需要显示目标类型的变量时,调试器都会创建类型代理类的一个新实例。 这可能会对性能起一定作用。 因此,不应在构造函数中执行非必需的工作。

为使性能损失的代价最小,表达式计算器不检查类型的显示代理上的特性,除非用户在调试器窗口中单击 + 号或使用 DebuggerBrowsableAttribute 扩展类型。 因此,不应将特性置于显示类型自身。 特性应该并且可以用于显示类型的正文中。

类型代理最好是作为特性目标类中的私有嵌套类。 这样,它访问内部成员就很容易。

如果在程序集级别使用了 DebuggerTypeProxyAttribute,则 Target 参数指定代理将要替换的类型。

有关如何将此特性与 DebuggerDisplayAttributeDebuggerTypeProxyAttribute 一起使用的示例,请参见 使用 DebuggerDisplay 特性

与 DebuggerTypeProxy 一起使用泛型

对泛型的支持是有限的。 对于 C# 而言,DebuggerTypeProxy 只支持开放类型。 开放类型(也称作“非构造类型”)是一种还没有用其类型形参的实参实例化的泛型类型。 不支持封闭类型(也称作“构造类型”)。

开放类型的语法类似于:

Namespace.TypeName<,>

如果使用泛型类型作为 DebuggerTypeProxy 中的目标,必须使用该语法。 DebuggerTypeProxy 机制将为您推理类型参数。

有关 C# 中的开放类型和封闭类型的更多信息,请参见 C# 语言规范 中的 20.5.2 节“开放类型和封闭类型”。

Visual Basic 没有开放类型语法,因此您不能够在 Visual Basic 中执行同样的操作。 而必须使用开放类型名称的字符串表示形式。

"Namespace.TypeName'2"

请参见

参考

使用 DebuggerDisplay 特性

概念

显示自定义数据类型

使用调试器显示特性增强调试