Лямбда-выражение с пустым вводом - PullRequest
30 голосов
/ 02 октября 2009

Хорошо, очень глупый вопрос.

x => x * 2

- это лямбда, представляющая то же самое, что и делегат для

int Foo(x) { return x * 2; }

Но каков лямбда-эквивалент

int Bar() { return 2; }

??

Большое спасибо!

Ответы [ 4 ]

38 голосов
/ 02 октября 2009

Нулевой лямбда-эквивалент будет () => 2.

19 голосов
/ 02 октября 2009

Это было бы:

() => 2

Пример использования:

var list = new List<int>(Enumerable.Range(0, 10));
Func<int> x = () => 2;
list.ForEach(i => Console.WriteLine(x() * i));

Как и просили в комментариях, вот разбивка приведенного выше образца ...

// initialize a list of integers. Enumerable.Range returns 0-9,
// which is passed to the overloaded List constructor that accepts
// an IEnumerable<T>
var list = new List<int>(Enumerable.Range(0, 10));

// initialize an expression lambda that returns 2
Func<int> x = () => 2;

// using the List.ForEach method, iterate over the integers to write something
// to the console.
// Execute the expression lambda by calling x() (which returns 2)
// and multiply the result by the current integer
list.ForEach(i => Console.WriteLine(x() * i));

// Result: 0,2,4,6,8,10,12,14,16,18
9 голосов
/ 02 октября 2009

Вы можете просто использовать (), если у вас нет параметров.

() => 2;
4 голосов
/ 02 октября 2009

Лмабда это:

() => 2
...