如何在编辑包含lambda表达式的方法后继续调试?

use*_*322 5 c# debugging lambda

通常,当方法在其中的某处包含lambda表达式时,如果编辑该方法,Visual Studio将说:

修改包含lambda表达式的"方法"将阻止在启用"编辑和继续"时继续调试会话.

有没有办法避免这个错误?

在我的例子中,我有一个类,其构造函数接受一个Action.

Button(Texture2D t2d, Vector2 v2, Action onPress)
...
Button b = new Button(t2d, new Vector2(40, 60), () => { MainStatic.t = t; });
Run Code Online (Sandbox Code Playgroud)

有关此问题的其他信息:

Eri*_*ert 12

更新:在用户对此功能的许多请求之后,在Visual Studio 2015中添加了所需的功能.这个答案和问题现在已经过时了.


有没有办法避免这个错误?

是.从方法中删除lambda.或者,不要编辑方法.

有没有办法避免这个错误,而不从方法中删除lambda并仍在编辑方法?

错误消息不骗你.

如果您感到好奇,原因是因为lambdas被编译为嵌套类的方法,而lambda关闭的局部变量将成为该类的字段.编辑并继续功能会在您编辑时动态重写当前方法,但即使是简单的编辑也可能导致对这些嵌套类的复杂更改.而不是花费大量精力使E&C为这种情况工作,从而从其他更有价值的功能中窃取资源,调试器团队只是将其视为非法.

  • @EricLippert听到这个令人失望.在编辑和继续中启用lambdas以及监视/继续窗口是Visual Studio Connect站点上第三高的投票问题. (3认同)
  • 阅读此假定的新功能的UPDATE部分:**此处是Visual Studio Community 2017,错误仍然出现**。有人知道他们是否回滚了更改吗? (2认同)
  • 在VS2022中仍然出现同样的错误。 (2认同)