我将以下代码设置为一个虚拟示例,以说明我在生产代码中找到的内容。
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;在当前上下文中不存在
但是代码本身运行正常,在我跨过该行后,我可以看到分配给变量的值。
这已在多台计算机上复制,包含生产代码和虚拟示例,因此我不认为这是一个环境问题。
以下是该问题的录音,可以通过点击录音并在其直接地址查看来全面查看。
有什么想法吗?
答案 0 :(得分:2)
我怀疑监视表达式评估程序尚未更新以处理本地函数(或者,如果它在某些版本的VS中有效,而在其他版本中没有 - 在您的特定版本中尚未更新)。
本地函数(如GreaterThan
和OperateOnTwoNumbers
)只是语法糖,并且真正编译成具有神秘名称的静态函数:
[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;),并且实际上没有这样的功能。