Почему не возможно оценить лямбды в непосредственном окне?

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

ОБНОВЛЕНИЕ:

Я нашел этот проект на codeplex Расширенным Непосредственным Окном. Кажется, что от этого отказывались в течение некоторого времени, но это может быть подтверждением концепции. Кто-либо знает какие-либо другие непосредственные дополнения расширения окна? Те, которые могут выполнить for/foreach операторы в C#, например?

20
задан JaredPar 22 July 2010 в 17:55
поделиться

4 ответа

ДжаредПар из Microsoft написал пару сообщений в блоге, отвечая на ваш вопрос: часть 1 и часть 2 . Вы найдете там ответы.

15
ответ дан 30 November 2019 в 00:55
поделиться

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

Даже не учитывая общую сложность выполнения этого, тогда у него будет два варианта:

  • захватить все значения переменных как константы; выполнимо и довольно просто, но может легко означать, что результат выполнения в непосредственном окне очень отличается от результата выполнения в основном теле (очень нежелательно)
  • переписать весь код (для причины, указанные выше) на лету (предположительно, невозможно)

Имея выбор между «нежелательным» и «невозможным», я полагаю , они просто предпочли не реализовывать функцию, которая по своей природе была бы хрупкой. , и очень сложно написать.

5
ответ дан 30 November 2019 в 00:55
поделиться

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

Я думаю, что все сводится к тому, что окно Immediate - это просто средство оценки, а не интерпретатор.

http://msdn.microsoft.com/en-us/library/f177hahy (VS.80) .aspx

«Непосредственное окно используется во время разработки для отладки и оценки выражений, выполнения операторов, переменных для печати. значения и т. д. Он позволяет вам вводить выражения, которые будут оцениваться или выполняться языком разработки во время отладки »

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

4
ответ дан 30 November 2019 в 00:55
поделиться

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

0
ответ дан 30 November 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: