Почему вы не можете редактировать и продолжать отладку, если в методе есть лямбда-выражение? - PullRequest
26 голосов
/ 19 августа 2009

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

Так почему же вы не можете редактировать и продолжать, если в методе есть лямбда-выражение, а с помощью нотации запроса вы можете это сделать?

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

Ответы [ 3 ]

20 голосов
/ 19 августа 2009

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

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

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

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

0 голосов
/ 19 августа 2009

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

0 голосов
/ 19 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...