Некоторое время назад я узнал о лямбдах, но не совсем понимал принципов построения выражений с лямбдой. Но сегодня наткнулся на пост Charlie Calvert'а и всё для себя прояснил.
Рассмотрим пример:
Данная запись эквивалентна следующему блоку кода:
Можно заметить, что левые части выражения идентичны:
Ну а теперь, если внимательно взглянуть на правые части, то можно заметить одну особенность.
Сравним правые части выражений: (a, b) и Add. В скобках у нас указаны аргументы метода Add, а (a + b) является телом метода Add.
То есть, если просто, то, что идет в правой части до лямбды "=>" — это аргументы метода, а то, что после лямбды — тело метода.
Также можно представить метод без аргументов:
Ну и для тех, кто, может быть, не знает, как все это произносится: (a, b) => a + b читается «a и b переходят в a плюс b».
После этого просветления мне стало всё понятно, и, надеюсь, больше я подсматривать в примеры при создании лямбда выражений не буду :)
А вот и сам источник: blogs.msdn.com/charlie/archive/2008/06/28/lambdas.aspx
UPD: здесь можно прочитать про замыкания, и проблемы, возникающие при этом
Рассмотрим пример:
Func<int, int, int> myLambda = (a, b) => (a + b);
* This source code was highlighted with Source Code Highlighter.
Данная запись эквивалентна следующему блоку кода:
public static int Add(int a, int b)
{
return a + b;
}
Func<int, int, int> myDelegate = Add;
* This source code was highlighted with Source Code Highlighter.
Можно заметить, что левые части выражения идентичны:
Func<int, int, int> myLambda = (a, b) => (a + b);
Func<int, int, int> myDelegate = Add;
* This source code was highlighted with Source Code Highlighter.
Ну а теперь, если внимательно взглянуть на правые части, то можно заметить одну особенность.
Сравним правые части выражений: (a, b) и Add. В скобках у нас указаны аргументы метода Add, а (a + b) является телом метода Add.
То есть, если просто, то, что идет в правой части до лямбды "=>" — это аргументы метода, а то, что после лямбды — тело метода.
Также можно представить метод без аргументов:
public static void UseLocal()
{
int n;
Func<int> func = () => { n = 6; return n; };
n = func();
Console.WriteLine(n); // Outputs the number 6
}
* This source code was highlighted with Source Code Highlighter.
Ну и для тех, кто, может быть, не знает, как все это произносится: (a, b) => a + b читается «a и b переходят в a плюс b».
После этого просветления мне стало всё понятно, и, надеюсь, больше я подсматривать в примеры при создании лямбда выражений не буду :)
А вот и сам источник: blogs.msdn.com/charlie/archive/2008/06/28/lambdas.aspx
UPD: здесь можно прочитать про замыкания, и проблемы, возникающие при этом