Что означает () в лямбда-выражении при использовании действий? - PullRequest
23 голосов
/ 26 февраля 2009

Я вставил код с сайта C # Jon Skeet на глубине:

static void Main()
{
    // First build a list of actions
    List<Action> actions = new List<Action>();
    for (int counter = 0; counter < 10; counter++)
    {
        actions.Add(() => Console.WriteLine(counter));
    }

    // Then execute them
    foreach (Action action in actions)
    {
        action();
    }
} 

http://csharpindepth.com/Articles/Chapter5/Closures.aspx

Обратите внимание на строку:

действий. Добавить (()

Что означает () в скобках?

Я видел несколько примеров лямбда-выражений, делегатов, использования объекта Action и т. Д., Но я не видел объяснения этого синтаксиса. Что оно делает? Зачем это нужно?

Ответы [ 6 ]

37 голосов
/ 26 февраля 2009

Это сокращение для объявления лямбда-выражения, которое не принимает аргументов.

() => 42;  // Takes no arguments returns 42
x => 42;   // Takes 1 argument and returns 42
(x) => 42; // Identical to above
6 голосов
/ 26 февраля 2009

Это лямбда-выражение без параметров.

5 голосов
/ 26 июня 2009

Я думаю о ламбах вот так:

(x) => {return x * 2; }

Но важно только это:

( x ) => {return x * 2 ; }

Нам нужно =>, чтобы знать, что это лямбда, а не приведение, и таким образом мы получаем это:

x => x * 2

(извините за то, что не отформатировал код как код, это потому, что вы не можете выделить вещи жирным шрифтом в коде ..)

3 голосов
/ 26 февраля 2009

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

3 голосов
/ 26 февраля 2009

С MSDN . Выражение лямбда принимает форму (входные) => выражение. Таким образом, лямбда-выражение типа () => обозначает отсутствие входных параметров. Какая подпись для Action не принимает параметров

2 голосов
/ 26 февраля 2009

Обозначает анонимную функцию без параметра.

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