有没有办法在Visual Studio调试器中查看对象的变量而不会看到所有基类的东西

Ala*_*jeu 2 c# debugging visual-studio-2015

特别是,检查Windows窗体对象,我想看到我的代码中定义的成员,而不总是看到基类中框架定义的数百个成员.

在此输入图像描述

Tho*_*kow 5

使用框架属性有多种内置方式(尽管其中没有一种特别可扩展).


1.使用 [DebuggerDisplay]

假设您的课程如下:

public class MyForm : Form
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

你可以像这样添加[DebuggerDisplayAttribute]到类中:

[DebuggerDisplay("Foo = {Foo}, Bar = {Bar}")
public class MyForm : Form
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在只显示FooBar.

优势:仅显示您希望的成员.

缺点:您必须明确指定要显示的成员,并为稍后添加的每个属性重复该步骤.


2.使用 [DebuggerTypeProxy]

您可以定义应该在调试器中显示而不是真实类的代理类.

再说一次,假设你的班级看起来像这样

public class MyForm : Form
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

您现在可以继续定义一个代理类,该类仅公开您要显示的成员并将其应用于[DebuggerTypeProxyAttribute]类,如下所示:

[DebuggerTypeProxy(typeof(MyFormDebugView))]
public class MyForm : Form
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}

public class MyFormDebugView
{
    public int Foo { get; set; }
    public string Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,你只能看到FooBar在调试器中显示,而不是继承的成员Form.

优点:仅显示代理类中的成员.无需明确指定这些成员.

缺点:无论何时MyForm向调试器中添加新属性等,都必须调整代理类型.