c# - 如何使 [DebuggerDisplay] 尊重继承的类或至少使用集合?

标签 c# visual-studio visual-studio-2008 debugging visual-studio-2008-sp1

我有一个继承自 List<MagicBean> 的类.它在所有方面都运行良好并且符合预期,除了一个:当我添加 [DebuggerDisplay] 时属性。即使查看 List 也有其作为 [DebuggerDisplay("Count = {Count}")] ,如果我将其复制并粘贴到我的上,我将无法直接查看我拥有的所有 MagicBeans,而无需在调试时钻入 base->private 成员。

我如何才能两全其美? IE:值列中的自定义值,Visual Studio 没有对我隐藏我的魔 bean ?

最佳答案

您可以使用 DebuggerTypeProxy 获得您需要的效果属性。您需要创建一个类来调试继承列表的“可视化”:

internal sealed class MagicBeanListDebugView
{
    private List<MagicBean> list;

    public MagicBeanListDebugView(List<MagicBean> list)
    {
        this.list = list;
    }

    [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
    public MagicBean[] Items{get {return list.ToArray();}}
}

然后您可以声明这个类以供调试器用于显示您的类,连同 DebuggerDisplay 属性:

[DebuggerDisplay("Count = {Count}")]
[DebuggerTypeProxy(typeof(MagicBeanListDebugView))]
public class MagicBeanList : List<MagicBean>
{}

这将在您将鼠标悬停在 Visual Studio 中的继承列表实例上时显示“Count = 3”消息,并在您展开根节点时显示列表中的项目 View ,而无需向下钻取基本属性。

使用 ToString() 专门获取调试输出并不是一个好方法,除非您当然已经覆盖了 ToString() 以便在其他地方的代码中使用,在您可以在哪种情况下使用它。

关于c# - 如何使 [DebuggerDisplay] 尊重继承的类或至少使用集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1100506/

相关文章:

visual-studio - 无法在VS 2012 RC中正确添加服务引用

c# - 字符串文件路径不起作用c#

c# - 使用一个类(反)序列化不同的根元素名称

c++ - 错误 C3861 : 'aligned' : identifier not found

c# - Visual Studio 2010 是否支持 Eclipse 的 "Generate delegate methods"之类的东西?

.net - 获取嵌入式资源

c# - 如何在不重新编译 VS2008 中的解决方案的情况下热交换引用的 DLL?

c# - Visual Studio 2008用红色强调非错误代码

c# - ABC 上的符号字体pdf

c# - 如何从 C# 将 PWCHAR 传递到 C++ dll