【问题标题】:Can I call local function of C# in Quick Watch while debugging?调试时可以在 Quick Watch 中调用 C# 的本地函数吗?
【发布时间】:2025-12-25 08:05:17
【问题描述】:

我想在本地函数中重置密码。突然,我试图从快速手表中运行这个本地功能,但它不起作用。

如果我做错了什么,请帮助我。提前致谢。

【问题讨论】:

  • QuickWatch 用于查看变量的值,而不是执行代码...
  • 尝试使用即时窗口...
  • 但我可以在 QuickWatch 中运行其他功能......它显示表达式已被评估并且没有价值。
  • 我不担心输出,我只是想执行该函数.. 立即窗口也显示相同的错误消息.. 错误 CS0103: The name 'ResetPasswordLocal' does not exist in the current上下文
  • 一定要了解“当前上下文”。由于这是一个实例方法,调试器只有在您当前在该类的方法之一中有一个活动断点时才能识别它。一旦你得到了正确的答案,你会发现它也不喜欢处理 await 。或者任务。当存在活动断点时,您不能期望线程正确运行。

标签: c# c#-7.0


【解决方案1】:

我不得不说我还没有尝试过,也不会费心去做,因为本地函数比你想象的要多得多,而且我认为它对调试器的优先级很低。

尝试将您的代码放在sharplab.io 中,看看如何制作该本地函数。

【讨论】:

    【解决方案2】:

    编译器会更改本地函数的名称,从而阻止您在调试器中使用其原始名称调用它。有关示例,请参阅this question。您可以做的是临时修改代码以将对本地函数的引用保存在委托变量中。重新编译后,您可以从 Quick Watch 或即时窗口中通过委托变量调用该函数。在您的情况下,将此代码添加到方法的开头:

    Func<string,Task> f = ResetPasswordLocal;
    

    现在您可以在 Quick Watch 中调用 f

    【讨论】: