Почему вы не можете редактировать и продолжать отладку, если в методе есть лямбда-выражение?
-
18-09-2019 - |
Вопрос
В других вопросах я видел, что синтаксис запроса Linq компилируется в Lambda.
Так почему же вы не можете выполнить операцию «редактировать и продолжить», если в методе есть лямбда-выражение, а с нотацией запроса — можно?
Что больше всего бесит и серьезно заставляет меня задуматься о переходе на использование нотации запросов. повсюду, заключается в том, что даже если вашего кода нет в Lambda, но где-то еще в том же методе есть Lambda, вы не можете редактировать и продолжать!Это типа неоправданная боль, причиненная неосторожным разработчикам!
Решение
Редактировать и продолжить позволяет изменять реализации методов «вживую», но не то, какие поля находятся в типах.
Лямбда-выражения (и анонимные методы) могут в конечном итоге создавать свои собственные частные типы при захвате переменных.Изменение лямбда-выражения может изменить задействованные типы, что приведет к прерыванию редактирования и продолжению.
Это звучит так должен можно внести изменения в код, которые не оказывают такого влияния, но я подозреваю, что проще полностью предотвратить это - что также означает, что вы не делаете этого. начинать внесение изменений, а затем обнаруживаете, что вы не можете внести изменения на полпути.
(Лично я вообще не фанат E&C, поэтому никогда этого не замечал.)
Другие советы
Я не знаю наверняка, но я предполагаю, что сложность заключается в выяснении того, что нужно изменить, когда задействованы локальные переменные, которые переносятся в классы.Я предполагаю, что на данном этапе выяснение того, какие изменения будут безопасными, а какие нет, считалось сложным и подверженным ошибкам.Инструментарий 2010 года был сосредоточен на многопоточности и новом пользовательском интерфейсе — возможно, мы получим его в следующей версии.
Я не знаю этого наверняка, но предполагаю, что это связано с тем, как компилятор преобразует лямбда-выражения, образующие замыкания, в генерируемые компилятором классы.Вероятно, не существует (простого) способа применить изменения, внесенные в скомпилированный код, и сохранить текущее состояние.