28

他の質問で、Linq クエリ構文が Lambda にコンパイルされると述べているのを見てきました。

では、メソッドに Lambda 式がある場合、エディット コンティニュを実行できないのに、クエリ表記では実行できるのはなぜでしょうか?

最も腹立たしく、どこでもクエリ表記法を使用するように切り替えることを真剣に考えさせられているのは、コードが Lambda になくても、同じメソッドの別の場所に Lambda がある場合、編集して続行できないことです! それは、不注意な開発者に不当な苦痛を与えるようなものです!

4

3 に答える 3

22

エディット コンティニュでは、メソッドの実装を「ライブ」に変更できますが、どのフィールドが型に含まれるかは変更できません。

ラムダ式 (および匿名メソッド) は、変数をキャプチャするときに独自のプライベート タイプを作成することになります。ラムダ式を変更すると、関連する型が変更される可能性があり、編集と続行が中断されます。

この影響を及ぼさないコードの変更は可能であるように思えますが、完全に防止する方が単純に簡単ではないかと思います。つまり、変更を開始してから変更が妨げられていることがわかるということでもありませ。あなたの変化の途中です。

(個人的にはそもそもE&Cのファンではないので、気にしたことはありません。)

于 2009-08-19T14:03:28.090 に答える
0

確かなことはわかりませんが、クラスにリフトされるローカル変数が含まれている場合、何を変更する必要があるかを理解するのは複雑だと思います。どの変更が安全で何がそうでないかを理解することは、現時点では複雑でエラーが発生しやすいと見なされていたと思います。2010 年のツールは、スレッド化と新しい UI に重点を置いていました。おそらく、次のバージョンで導入されるでしょう。

于 2009-08-19T14:05:45.527 に答える
0

確かなことはわかりませんが、コンパイラーがクロージャーを形成するラムダ式をコンパイラー生成クラスに変換する方法に関係していると思います。おそらく、コンパイルされたコードに加えられた変更を適用し、現在の状態を保持する (簡単な) 方法はありません。

于 2009-08-19T14:06:38.053 に答える