Ответ 1
Это сокращение для объявления лямбда-выражения, которое не принимает аргументов.
() => 42; // Takes no arguments returns 42
x => 42; // Takes 1 argument and returns 42
(x) => 42; // Identical to above
Я наклеил код с сайта Jon Skeet С# In Depth:
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
Обратите внимание на строку:
actions.Add(()
Что означает() в квадратных скобках?
Я видел несколько примеров лямбда-выражений, делегатов, использование объекта Action и т.д., но я не видел объяснения этого синтаксиса. Что оно делает? Почему это необходимо?
Это сокращение для объявления лямбда-выражения, которое не принимает аргументов.
() => 42; // Takes no arguments returns 42
x => 42; // Takes 1 argument and returns 42
(x) => 42; // Identical to above
Это выражение лямбда без параметров.
Я думаю о lambas вот так:
(x) = > {return x * 2; }
Но это важно только:
(x) = > {return x * 2; }
Нам нужно = > знать, что это лямбда вместо кастинга, и таким образом мы получаем следующее:
x = > x * 2
(извините за не форматирование кода как кода, потому что вы не можете сделать вещи жирным в коде..)
От MSDN. Выражение lambda принимает форму (входы) = > выражение. Таким образом, выражение lambda like() = > означает, что входных параметров нет. Какая подпись для Action не имеет параметров
То, что делает эта строка, - это добавить анонимное действие в список с использованием лямбда-выражений, которое не принимает никакого параметра (причина в том, что существует()) и ничего не возвращает из-за того, что он печатает только фактическое значение счетчика.
Обозначает анонимную функцию без параметра.