Visual Studio调试器如何在监视窗口中推断出值?

时间:2016-02-11 08:06:32

标签: c# watch

例如,在观察窗口中,我看到:

  

名称:任务
  :Id = 11,Status = WaitingToRun,Method =&#34; Void < RetreiveFromCache > b__0()&#34;
  输入:System.Threading.Tasks.Task

所以task变量属于Type Task,我想访问调试器打印的相同值,特别是我对Method值感兴趣( RetreiveFromCache

但是在task变量上我只能访问.Id,.Status等...但不是.Method

Method值来自何处?

调试器如何推断&#34; Method值?

2 个答案:

答案 0 :(得分:0)

Yo可以覆盖ToString()方法。这是简单的方法 但是你要找的是这些课程:

  • DebuggerDisplayAttribute
  • DebuggerBrowsableAttribute

有关详细信息,请参阅https://msdn.microsoft.com/es-es/library/ms228992(v=vs.110).aspx

答案 1 :(得分:0)

无法访问Action对象的Task变量。您可以做的是创建自己的类,扩展Task的功能,同时公开Action(包含有关要运行的方法的信息)。

一个简单的例子:

public class CustomTask : Task
{
    private Action m_action;

    public Action Action
    {
        get { return m_action; }
    }

    public CustomTask(Action action) : base(action)
    {
        m_action = action;
    }
}

然后在您的代码中,您可以像这样使用它:

CustomTask ct = new CustomTask(MyMethod);

Console.WriteLine("ID: {0}, Method: {1}, Status: {2}", ct.Id, ct.Action.Method, ct.Status);
//Prints: "ID: 1, Method: Void MyMethod(), Status: Created"

ct.Start();
Console.WriteLine("ID: {0}, Method: {1}, Status: {2}", ct.Id, ct.Action.Method, ct.Status);
//Prints: "ID: 1, Method: Void MyMethod(), Status: WaitingToRun"

ct.Wait();
Console.WriteLine("ID: {0}, Method: {1}, Status: {2}", ct.Id, ct.Action.Method, ct.Status);
//Prints: "ID: 1, Method: Void MyMethod(), Status: RanToCompletion"

请注意,要访问有关该方法的信息,您必须访问ct.Action.Method