[英]How the Visual Studio debugger infer Value inside watch window?
例如,在监视窗口中,我看到:
名称 :任务
值 :Id = 11,状态= WaitingToRun,方法=“无效<
RetreiveFromCache>
b__0()”
类型 :System.Threading.Tasks.Task
因此, task
变量的类型为Task,我想访问调试器打印的相同值,特别是我对Method
值( RetreiveFromCache )感兴趣
但是在task
变量上,我只能访问.Id,.Status等...,而不能访问.Method
Method
值从何而来?
调试器如何“推断” Method
值?
您可以覆盖ToString()方法。 这是简单的方法,但是您正在寻找的是以下类:
有关更多信息,请参见https://msdn.microsoft.com/es-es/library/ms228992(v=vs.110).aspx
Task
对象的Action
变量不可访问。 您可以做的是创建自己的类,该类扩展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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.