如何让自定义类在Visual Studio调试器中显示带View按钮的字符串可视化器
实现方法
要让自定义类在Visual Studio调试时获得和原生string类型完全一致的展示效果(保留换行、显示文本可视化器「View」按钮),仅添加[DebuggerDisplay("{ToString()}")]是不够的,你可以选择以下任意一种方案配置,不需要修改原有业务逻辑:
方案1:无额外依赖的调试代理实现
不需要引用任何Visual Studio相关的调试扩展程序集,仅通过.NET框架自带的调试特性即可实现:
- 保留你已经添加的
[DebuggerDisplay("{ToString()}")]特性 - 给类追加
[DebuggerTypeProxy]特性,指向一个私有的调试代理类,代理类暴露一个string类型的属性返回ToString()的结果,调试器识别到字符串类型的调试根目标后,会自动关联内置文本可视化器,显示「View」按钮。
完整示例代码:
using System.Diagnostics; // 保留原有DebuggerDisplay特性 [DebuggerDisplay("{ToString()}")] // 追加调试类型代理特性 [DebuggerTypeProxy(typeof(CustomStringBuilderDebugProxy))] public class YourCustomStringBuilder { // 类内原有业务逻辑保持不变 public override string ToString() { // 你原有的生成最终输出字符串的逻辑 } /// <summary> /// 调试专用代理类,不需要对外暴露 /// </summary> private sealed class CustomStringBuilderDebugProxy { private readonly YourCustomStringBuilder _target; public CustomStringBuilderDebugProxy(YourCustomStringBuilder target) { _target = target; } /// <summary> /// 字符串类型的返回值会被调试器自动识别,关联文本可视化器 /// </summary> public string Value => _target.ToString(); } }
方案2:直接绑定内置字符串可视化器
如果你的项目可以引入Visual Studio调试可视化器相关的程序集,可以直接给类显式绑定系统自带的字符串可视化器,效果和原生字符串完全一致:
- 给项目添加
Microsoft.VisualStudio.DebuggerVisualizers程序集的引用 - 在类上追加
[DebuggerVisualizer]特性,指定使用内置的StringVisualizer
完整示例代码:
using System.Diagnostics; using Microsoft.VisualStudio.DebuggerVisualizers; [DebuggerDisplay("{ToString()}")] // 显式指定使用系统内置的字符串可视化器 [DebuggerVisualizer(typeof(StringVisualizer))] public class YourCustomStringBuilder { // 类内原有业务逻辑保持不变 public override string ToString() { // 你原有的生成最终输出字符串的逻辑 } }
配置完成后重新编译项目,再次调试时,在局部变量窗口、监视窗口或者鼠标悬停查看类实例时,就会和原生
string类型完全一致:内容正常保留换行格式,右侧出现可打开文本可视化器的「View」按钮。
内容的提问来源于stack exchange,提问作者Rick de Water
相关产品推荐
相关产品推荐

