Выражения с выражением тела против лямбда-выражений - PullRequest
0 голосов
/ 08 января 2019

Лямбда-выражение - это блок кода (выражение или блок операторов), который обрабатывается как объект. Он может быть передан в качестве аргумента для методов, а также может быть возвращен вызовами метода.

(input parameters) => expression
 SomeFunction(x => x * x);

Глядя на это утверждение, мне было интересно, в чем разница при использовании лямбда-выражений и при использовании выражения в теле?

public string Name => First + " " + Last;

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Методы выражения тела - синтаксический сахар. Вместо того чтобы писать это:

public string GetName()
{
    return First + " " + Last;
}

Вы можете просто написать это:

public string GetName() => First + " " + Last;

и результат вызова первого или второго будет точно таким же.

То же самое верно и для всех типов элементов тела выражения .

С другой стороны, лямбда-выражения, как указано формально здесь , это:

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

При этом ясно, что, несмотря на сходство синтаксиса, есть две совершенно разные вещи.

0 голосов
/ 08 января 2019

Синтаксис в теле выражения на самом деле является только более коротким синтаксисом для свойств и (именованных) методов и не имеет особого значения.

Эти две строки полностью эквивалентны:

public string Name => First + " " + Last;

public string Name { get { return First + " " + Last; } }

Вы также можете написать методы с выражением тела (обратите внимание на разницу в том, что ваше лямбда-выражение делает то же самое. Здесь вы указываете тип возвращаемого значения и имя):

public int Square (int x) => x * x;

вместо

public int Square (int x)
{
    return x * x;
}

Вы также можете использовать его для записи геттеров и сеттеров

private string _name;
public Name
{
    get => _name;
    set => _name = value;
}

и для конструкторов (при условии, что класс с именем Person):

public Person(string name) => _name = name;

Используя синтаксис кортежа, вы даже можете назначить несколько параметров

public Person(string first, string last) => (_first, _last) = (first, last);

Это работает и для присвоения свойств.

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