Подтвердить что ты не робот

Почему вы не можете редактировать и продолжать отладку, когда в методе есть выражение Lambda?

Я видел, как он сказал в других вопросах, что синтаксис запроса Linq компилируется в Lambda.

Итак, почему вы не можете редактировать и продолжать, когда в методе есть выражение Lambda, а с помощью нотации запроса вы можете?

Что больше всего бесит, и серьезно заставляет меня подумать о переходе на использование нотации запроса везде, так это то, что даже если ваш код не находится в лямбда, но там есть Lambda где-то еще в том же методе, вы не можете редактировать и продолжать! Вот, например, безвозмездная боль, нанесенная неосторожным разработчикам!

4b9b3361

Ответ 1

Редактировать и продолжить может изменять реализации метода "вживую", но не в каких полях в типах.

Лямбда-выражения (и анонимные методы) могут создавать собственные частные типы при захвате переменных. Изменение лямбда-выражения может изменить используемые типы, которые нарушают редактирование и продолжают.

Похоже, что возможно внести изменения в код, который не имеет такого влияния, но я подозреваю, что это просто проще предотвратить его полностью - что также означает, что вы не начинаете вносить изменения, а затем обнаруживаете, что вы "предотвращено на полпути через ваши изменения".

(Лично я не поклонник E & C, в первую очередь, поэтому я никогда не замечал этого.)

Ответ 2

Я не знаю точно, но я предполагаю, что сложность в определении того, что нужно изменить, когда есть локальные переменные, которые поднимаются к классам. Я предполагаю, что выяснение того, какие изменения будут безопасными, и что не будет считаться сложным и подверженным ошибкам, чтобы получить право в этот момент. Инструментарий в 2010 году сосредоточился на потоковой обработке и новом интерфейсе - возможно, мы получим его в следующей версии.

Ответ 3

Я не знаю это точно, но я предполагаю, что он связан с тем, как компилятор преобразует лямбда-выражения, образуя замыкания в классы, сгенерированные компилятором. Вероятно, нет (простого) способа применить изменения к скомпилированному коду и сохранить текущее состояние.