28

我在其他问题中看到它说 Linq 查询语法编译为 Lambda。

那么,当方法中有 Lambda 表达式时,为什么不能编辑并继续,而使用查询符号可以呢?

最令人气愤的是,并且严重地让我考虑切换到在任何地方使用查询表示法,即使您的代码不在 Lambda 中,但在同一方法中的其他地方有一个 Lambda,您也无法编辑并继续!这就像对粗心的开发人员造成的无端痛苦!

4

3 回答 3

22

Edit and continue 能够“实时”更改方法实现,但不能更改类型中的字段。

Lambda 表达式(和匿名方法)在捕获变量时最终会创建自己的私有类型。更改 lambda 表达式可以更改所涉及的类型,这会破坏编辑并继续。

听起来应该可以对没有这种影响的代码进行更改,但我怀疑完全阻止它更容易 - 这也意味着你不会开始进行更改然后发现你被阻止了你的改变进行到一半。

(就我个人而言,我一开始就不是 E&C 的粉丝,所以我从来没有注意到它。)

于 2009-08-19T14:03:28.090 回答
0

我不确定,但我的猜测是当涉及到被提升到类的局部变量时,弄清楚需要改变什么是复杂的。我猜想弄清楚哪些更改是安全的,哪些不会被认为是复杂且容易出错的。2010 年的工具集中在线程和新的 UI 上——也许我们会在下一个版本中得到它。

于 2009-08-19T14:05:45.527 回答
0

我不确定,但我认为它与编译器将形成闭包的 lambda 表达式转换为编译器生成的类的方式有关。可能没有(简单的)方法可以应用对已编译代码所做的更改并保留当前状态。

于 2009-08-19T14:06:38.053 回答