委托在现代代码中无处不在;委托是一种类型,它表示对具有特定参数列表和返回类型的方法的引用。开发人员使用委托将方法作为参数传递给其他方法。您可能熟悉的一个例子是事件处理程序。处理程序是可以通过委托调用的方法。委托让我想起 C++ 的函数指针,当然委托是完全面向对象的。
有几种方式来表示委托,例如,Func 委托。此泛型委托表示接受一个或多个参数并返回指定类型值的方法。下面是一个示例(带有lambda表达式):
Func<int, int> Multiplier = n => n * 5; int val = Multiplier(5); Console.WriteLine(val);
这个概念的最新变体是 Action,它提供了更方便的简写。使用 Action时,不必显式地定义一个用单个参数封装方法的委托。下面是一个例子:
Action<string> outputFunc = GetOutputRoutine(); outputFunc("Hello, World!"); static Action<string> GetOutputRoutine() { return MyConsoleWriter; } static void MyConsoleWriter(string input) { Console.WriteLine("Console: {0}", input); }
所以,这是一堂很好的课,但我为什么要提到这些呢?虽然我发现在编写代码时像传递参数一样传递方法很方便,但我也希望在调试时更容易跟踪。当然,您可以轻松地单步执行这些方法,但我通常希望在单步执行之前或之后快速导航到由委托表示的底层代码,随着 Visual Studio 17.10 的最新更新,这非常容易。
当您在调试时暂停时,您可以将鼠标悬停在任何委托上并获得一个方便的跳转,这里是一个带有Func委托的示例。
在本例中,Go to Source 清楚地表明,您将被重定向回 lambda 表达式。
请注意,这不仅仅适用于托管代码的情况,它还支持 C++ 函数指针和 std::function。
我们感谢您的反馈,帮助我们改进 Visual Studio,使其成为您最好的工具!您可以通过开发者社区与我们分享反馈,通过发送反馈来报告问题或分享您的建议,推动对新功能或现有功能的改进。
请在 Twitter 上与 Visual Studio Debugger 团队保持联系。
原文链接:https://devblogs.microsoft.com/visualstudio/easily-navigate-code-delegates-while-debugging/