Вопрос:
Простите меня, если это кричит новичок, но что означает => в С#? Я был на презентации на прошлой неделе, и этот оператор (я думаю) использовался в контексте ORM. Я не обращал внимания на специфику синтаксиса, пока не вернусь к своим заметкам.
Лучший ответ:
В С# lambda operator написано “= > ” (обычно произносится “ переходит в“, когда читается вслух). Это означает, что аргументы слева передаются в блок кода (лямбда-функция/анонимный делегат) справа.
Итак, если у вас есть Func или Action (или любой из их двоюродных братьев с большим количеством параметров типа), вы можете назначить им выражение лямбда, а не создавать экземпляр делегата или иметь отдельный метод для отложенной обработки:
//creates a Func that can be called later Func<int,bool> f = i => i <= 10; //calls the function with 12 substituted as the parameter bool ret = f(12); Ответ №1
Поскольку никто еще не упомянул об этом, в VB.NET вы должны использовать ключевое слово function вместо = > , например:
dim func = function() true ‘or dim func1 = function(x, y) x + y dim result = func() ‘ result is True dim result1 = func1(5, 2) ‘ result is 7 Ответ №2
Это сокращение для объявления lambda.
i => i++
(вроде) такой же, как и запись:
delegate(int i) { i++; }
В контексте:
void DoSomething(Action<int> doSomething) { doSomething(1); } DoSomething(delegate(int i) { i++; }); //declares an anonymous method //and passes it to DoSomething
который (вроде) такой же, как и запись:
void increment(int i) { i++; }
Просто не указывая имени, он позволяет объявить функцию в строке, известную как “анонимная” функция.
Ответ №3
Когда говорят вслух, оператор лямбда (переходит на), который помогает определить анонимный делегат, который вы определяете в лямбда.
Обычное место, чтобы увидеть это с обработчиком событий. У вас часто будет событие типа загрузки страницы, которое обрабатывается лямбдой со следующим кодом:
this.Loaded += (o, e) => { // code }
Вы определили метод, обрабатывающий событие Loaded анонимно (у него нет имени), используя выражение лямбда. Он будет читать как “o, e переходит в… определение метода с помощью foo”.
Ответ №4
Это “лямбда-оператор”, и вы читаете его как “идет”. Скажем, у вас было утверждение:
doSomething(x => x + » hi»);
Вы можете заменить “= > ” в своем уме следующим образом:
doSomething(delegate (string x) { return x + » hi» });
Как вы можете видеть, он предлагает чертову стенографию. Компилятор определяет тип переменной, которую вы передаете, и позволяет избавиться от сигнатуры функции и брекетинга для кода, в который вы передаете переменные подписи.
Ответ №5
Это лямбда-оператор, часть выражения лямбда.
Все лямбда-выражения используют лямбда operator = > , который считывается как “идет к”. Левая сторона лямбды оператор задает ввод параметры (если есть) и правую сторону содержит выражение или утверждение блок. Лямбда-выражение x = > x * x читается “x переходит в x раз x”.
Ответ №6
Синтаксис для объявления анонимной функции, известной в С#, как “выражение лямбда”.
Например, (int p) => p * 2 представляет собой функцию, которая принимает целое число и умножает его на два.