Ограничение лямбды Действия C#

\pagestyle{plain} должен позаботиться об этом. Для отдельных страниц \thispagestyle{plain} http://www.ctex.org/documents/packages/layout/fancyhdr.pdf

16
задан Jacob Carpenter 31 October 2008 в 18:29
поделиться

5 ответов

Хм. У меня есть ответ, но это не является большим.

я не полагаю, что существует "бросок" выражение . Существует бросок оператор , но не только выражение. Сравните это с "Консолью. WriteLine ()", который является выражением вызова метода с пустым типом.

Как параллель, у Вас не может быть оператора переключения, или если оператор и т.д. как тело лямбды самостоятельно. У Вас может только быть выражение, или блок (разделите 7.14).

то, что какая-либо справка?

19
ответ дан 30 November 2019 в 16:50
поделиться

Вот мое взятие:

throw оператор, не выражение.

И ссылка:

12.3.3.11 оператора Throw

Для оператора stmt формы

throw expr;

определенное состояние присвоения v в начале expr совпадает с определенным состоянием присвоения v в начале stmt.

Для объяснения сущности, возможно, нужно думать о том, что выражение подразумевает в конструкции лямбды C#. Это - просто синтаксический сахар для:

delegate () { return XXX; }

, где XXX выражение

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

Вы не можете возвратить или бросить от неограниченной по объему лямбды.

Думают о нем этот путь... Если Вы не обеспечиваете {}, компилятор определяет, каково Ваше неявное возвращаемое значение. Когда Вы throw из лямбды, нет никакого возвращаемого значения. Вы даже не возвращаетесь void. Почему команда компилятора не обработала эту ситуацию, я не знаю.

1
ответ дан 30 November 2019 в 16:50
поделиться

Все ссылки я могу найти, отсюда:

http://msdn.microsoft.com/en-us/library/ms364047 (По сравнению с 80) .aspx#cs3spec_topic4

показывает, что у Вас есть две опции:

Action a = () => { throw new InvalidOperationException(); };

или

Action a = () => throw new InvalidOperationException()

Примечание пропавшие без вести; на конце. Да, это не имеет никакого смысла мне также. Примеры, которые они дают в спецификации:

x => x + 1                     // Implicitly typed, expression body
x => { return x + 1; }         // Implicitly typed, statement body
(int x) => x + 1               // Explicitly typed, expression body
(int x) => { return x + 1; }   // Explicitly typed, statement body
(x, y) => x * y               // Multiple parameters
() => Console.WriteLine()      // No parameters

Dunno, сколько справки, которая является - я не могу сказать, какой контекст Вы используете ее в и не помещаете a; на конце не имеет никакого смысла в C#

, которым различие может быть то, что это - орган по выражению - не оператор - если это не имеет {}. Что означает, что Ваш бросок не допустим там, поскольку это - оператор, не выражение!

1
ответ дан 30 November 2019 в 16:50
поделиться

Не большое удивление. Лямбда-выражения являются аспектом функциональный программирование. Исключениями является аспект процедурный программирование. Сетка C# между двумя стилями программирования не прекрасна.

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

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