如何让Visual Studio 2017以交互方式调试此行?

时间:2018-04-12 09:37:05

标签: c# visual-studio debugging

我将以下代码设置为一个虚拟示例,以说明我在生产代码中找到的内容。

static void Main(string[] args)
{
    bool GreaterThan(int x, int y)
    {
        return x > y;
    }

    bool OperateOnTwoNumbers(int x, int y, Func<int, int, bool> func)
    {
        return func(x, y);
    }

    var twoGreaterThanOne = OperateOnTwoNumbers(2, 1, GreaterThan);

}

当我在OperateOnTwoNumbers(2, 1, GreaterThan)设置手表或使用 Shift + F9 进行交互式调试时,我收到以下错误。

  

OperateOnTwoNumbers(2,1,GreaterThan)错误CS0103:名称&#39; OperateOnTwoNumbers&#39;在当前上下文中不存在

但是代码本身运行正常,在我跨过该行后,我可以看到分配给变量的值。

这已在多台计算机上复制,包含生产代码和虚拟示例,因此我不认为这是一个环境问题。

以下是该问题的录音,可以通过点击录音并在其直接地址查看来全面查看。

recording of problem

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我怀疑监视表达式评估程序尚未更新以处理本地函数(或者,如果它在某些版本的VS中有效,而在其他版本中没有 - 在您的特定版本中尚未更新)。

本地函数(如GreaterThanOperateOnTwoNumbers)只是语法糖,并且真正编译成具有神秘名称的静态函数:

[CompilerGenerated]
internal static bool <Main>g__OperateOnTwoNumbers|0_1(int x, int y, Func<int, int, bool> func)
{
  return func(x, y);
}

然后打电话给他们:

Program.<Main>g__OperateOnTwoNumbers|0_1(...);

因此,表达式评估程序应该意识到这一点,但它并没有尝试用OperateOnTwoNumbers名称调用函数(正如您从编译器错误消息中看到的那样#34;名称&#39; OperateOnTwoNumbers& #39;在当前上下文中不存在&#34;),并且实际上没有这样的功能。