Как C # лямбда работает без «возврата»? - PullRequest
1 голос
/ 09 октября 2019

Я иногда сталкивался с такими утверждениями

school.Where(s => s.name == "foo") 

Теперь я понимаю, что это лямбда, и я думаю, что мне комфортно с лямбдами. Я только начал C #, поэтому у меня есть этот вопрос. В утверждении

s => s.name == "foo"

, как выполняется возврат оценки для определения истинного или ложного. Я не вижу возврата? Я вижу только операцию сравнения в лямбда-теле и ничего не возвращается. Может кто-нибудь, пожалуйста, объясните мне это.

Ответы [ 4 ]

9 голосов
/ 09 октября 2019

В этой форме возврат неявен. Лямбда возвращает все, что возвращает выражение. Вы также можете написать это так:

s => { return s.name == "foo"; }

Причина, по которой возврат не требуется в краткой форме, заключается в том, что именно так был разработан язык. Это делает вещи короткими и приятными для использования вместо того, чтобы заставлять разработчика писать ненужный код.

1 голос
/ 09 октября 2019

Лямбда может быть определена двумя способами:

  • с помощью фигурных скобок: тогда вам нужно будет написать тело метода, как в обычном методе, то есть с returns и т. д. Пример

    var lambda = (string param) => { return param.Length; };
    
  • без фигурных скобок: тогда метод должен содержать одну строку , что также является результатом метода. Пример:

    var lambda = (string param) => param.Length;
    

Это сделано для того, чтобы однострочные методы выглядели красиво и чисто (особенно в методах LINQ extensoin):)

1 голос
/ 09 октября 2019

Заявление о возврате подразумевается. Если бы вы добавили скобки вокруг s.name == "foo", вам понадобится возврат. Компилятор по существу создает функцию, которая будет вызываться для вас. Это всего лишь синтаксис сахара. Это эквивалентно созданию функции самостоятельно и передаче ее в Where

0 голосов
/ 09 октября 2019

Возвращаемое значение всегда логическое, и вы можете получить его, как показано ниже:

s=> {retutn s.name=="foo";}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...