我在其他问题中看到过人们说Linq查询语法会编译为Lambda表达式。
那么,为什么当方法中存在Lambda表达式时,你不能进行编辑和继续操作,而使用查询符号则可以呢?
最让人恼火的是,这严重让我考虑到处都切换到使用查询符号,即使你的代码不在Lambda中,但在同一方法中的其他地方有Lambda,你也无法进行编辑和继续操作!这就是对未经事先警告的开发人员施加的毫无意义的痛苦!
我在其他问题中看到过人们说Linq查询语法会编译为Lambda表达式。
那么,为什么当方法中存在Lambda表达式时,你不能进行编辑和继续操作,而使用查询符号则可以呢?
最让人恼火的是,这严重让我考虑到处都切换到使用查询符号,即使你的代码不在Lambda中,但在同一方法中的其他地方有Lambda,你也无法进行编辑和继续操作!这就是对未经事先警告的开发人员施加的毫无意义的痛苦!
编辑和继续功能可以“实时”更改方法实现,但不能更改类型中的字段。
Lambda表达式(和匿名方法)在捕获变量时可能会创建自己的私有类型。更改Lambda表达式可能会更改涉及的类型,这将破坏编辑和继续功能。
听起来好像应该有可能对代码进行更改而不产生此影响,但我怀疑完全防止它可能更容易——这也意味着您不会开始进行更改,然后发现您中途被阻止。
(个人而言,我本来就不喜欢编辑和继续功能,所以我从未注意到它。)
我不确定,但我的猜测是在涉及到被提升到类中的局部变量时,需要弄清楚哪些内容需要更改的复杂性。我猜想,在这一点上,确定什么更改是安全的,什么更改是不安全的被认为是过于复杂和容易出错的。2010年的工具集侧重于线程和新UI - 也许我们会在下一个版本中得到它。
我不确定,但我认为这与编译器将形成闭包的lambda表达式转换为编译器生成的类的方式有关。可能没有(简单的)方法应用于编译后的代码所做的更改并保留当前状态。