2009-07-20 7 views
8

Я начинаю программировать на C# 2.0, поэтому я никогда не использовал лямбда-выражения, но почему так много суетится? Являются ли они просто синтаксическим сахаром вокруг анонимных делегатов, или есть что-то большее, чего я не вижу?Почему такая реклама с функциями лямбда C#?

+0

Новинка является его собственная награда: http://arstechnica.com/old/content/2008/06/mri-study-suggests-novelty -is-its-own-reward.ars – Greg

+1

Да, это дубликат, «в чем цель лямбда» было задано миллион раз.Но я не думаю, что люди, похоже, вообще не думают о дубликатах. –

+14

Да, это дубликат, «в чем цель лямбда», было задано миллион раз. Но я не думаю, что люди, похоже, вообще не думают о дубликатах. –

ответ

26

Ну, лямбда-выражения имеют две основных вещей более анонимные методы:

  • Они более краткие, чем анонимные методы
  • Они могут быть преобразованы в expression trees, а также делегаты

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

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

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

+0

JABTW - моя новая аббревиатура для дня - просто слишком многословная. Идеально подходит для просмотра кода. –

+0

+1 Мммммм ... выражение деревьев. –

+0

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

14

Они могут быть легко использованы в качестве синтаксического сахара вокруг делегата, но большая вещь о лямбдах заключается в том, что у компилятора есть возможность превратить их в expression trees, которые открывают множество возможностей (не последним из которых является LINQ).

+0

Хотя это большая вещь с точки зрения LINQ to SQL и т. Д., Я лично использую тот факт, что они работают гораздо чаще, чем я использую деревья выражений ... –

+0

Я тоже - но я думаю, что без деревьев выражений и LINQ C# команда была бы менее склонна добавлять лямбда-выражения к языку для терпения в одиночку :) –

4

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

+0

Боюсь, что я не делаю Linq. Я застрял в C# 2.0, так что я не могу представить этого. Спасибо, в любом случае. – raven

4

ли им просто синтаксический сахар вокруг анонимных делегатов, или есть нечто большее, чего я не могу видеть?

Хороший вопрос. Ответ сложный. Во-первых, очевидно, что деревья выражений являются большими. Но есть и тонкости. Вот мои пять многословной и часто отвлекаясь статьи на предмет того, как лямбды несколько отличаются от анонимных методов:

http://blogs.msdn.com/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous-methods-part-one.aspx

http://blogs.msdn.com/ericlippert/archive/2007/01/11/lambda-expressions-vs-anonymous-methods-part-two.aspx

http://blogs.msdn.com/ericlippert/archive/2007/01/12/lambda-expressions-vs-anonymous-methods-part-three.aspx

http://blogs.msdn.com/ericlippert/archive/2007/03/26/lambda-expressions-vs-anonymous-methods-part-four.aspx

http://blogs.msdn.com/ericlippert/archive/2007/03/28/lambda-expressions-vs-anonymous-methods-part-five.aspx

Все мои статьи о проблемах, связанных с лямбда-выражения находятся в архиве здесь:

http://blogs.msdn.com/ericlippert/archive/tags/Lambda+Expressions/default.aspx

Смежные вопросы