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

8
通常情况下,当一个方法中包含 lambda 表达式时,如果你编辑该方法,Visual Studio 会提示:

修改包含 lambda 表达式的 '方法' 将阻止调试会话继续进行,同时启用“编辑并继续”。

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

在我的情况下,我有一个类,它的构造函数接受一个 Action

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

这个问题的附加信息:


1
不可能的,看这里:https://dev59.com/9HRB5IYBdhLWcg3wl4AP#582138 - Mitch
我不明白为什么我不能通过我的构造函数避免它。 - user1306322
3
由于它已被标记为重复,我无法回答(在我看来并不是真的):我的解决方法是复制粘贴该方法,进行编辑,删除原始方法。尽管听起来很愚蠢,但这个方法有效,并且是避免重新启动调试的快速方式。 - alelom
1个回答

14

更新:经过许多用户要求,Visual Studio 2015 中已添加了所需的功能。此答案和问题现已过时。


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

有。从方法中删除 lambda 表达式。或者不编辑该方法。

有没有一种方法可以在不删除方法中的 lambda 的情况下避免此错误,并且仍然编辑该方法?

没有。错误消息没有欺骗您。

原因是因为 lambda 编译为嵌套类的方法,lambda 使用的本地变量成为该类的字段。编辑并继续功能会随着您编辑当前方法而即时重写它,但即使简单的修改也可能导致对这些嵌套类进行复杂的更改。调试器团队没有花费大量精力使编辑并继续功能适用于此场景,从而从其他更有价值的功能中窃取资源,他们只是将其设置为非法。


1
@user1306322:好的。将其更改为不是lambda表达式的内容。例如,将其更改为嵌套类的方法。如果您完成构建嵌套类并分析何时需要在编辑时更改它,则调试器无需为您执行此操作。 - Eric Lippert
3
很遗憾听到这个消息。在Visual Studio Connect网站上,启用在“编辑并继续”和“监视/继续”窗口中使用Lambda表达式的问题是第三高投票问题。 - MgSam
Visual Studio团队正在进行一项调查。请分享您的反馈意见:http://aka.ms/encsurvey - Dan Puza
2
阅读此所谓新功能的 UPDATE 部分:在这里使用 Visual Studio Community 2017,错误仍然出现。有人知道他们是否回滚了更改吗? - alelom
2
在VS2022中仍然存在相同的错误。 - Beetee
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接