Использование лямбда-оператора C# в сигнатуре метода

avatar
netfed
8 августа 2021 в 22:56
127
2
-1

Я прочитал об операторе лямбда в документе C# (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-operator#code-try-0) о том, как его можно использовать в сигнатуре или конструкторе C#. Еще не просветленный. Может кто-нибудь объяснить, что происходит в сигнатуре этого метода:

public SampleCustomer(string name, DateTime dateJoined)
    => (Name, DateJoined) = (name, dateJoined);
Источник

Ответы (2)

avatar
ingvar
8 августа 2021 в 23:03
4

Это пример конструктора, написанного с использованием синтаксиса =>. => аналогичен обычному методу записи в { ... }. Что здесь происходит:

public SampleCustomer(string name, DateTime dateJoined) => (Name, DateJoined) = (name, dateJoined);

равно:

public SampleCustomer(string name, DateTime dateJoined)
{
    (Name, DateJoined) = (name, dateJoined);
}

После удаления кортежей это выглядит так:

public SampleCustomer(string name, DateTime dateJoined)
{
    Name = name;
    DateJoined = dateJoined;
}

Итак, в этом конструкторе некоторые поля назначаются из переданных ему значений.

netfed
8 августа 2021 в 23:07
0

Спасибо за отличный ответ, но то, что вы называете синтаксисом =>, является термином в C # или, возможно, во многих других языках (общий термин)?

ingvar
8 августа 2021 в 23:09
0

В разных языках => может работать по-разному. В C# и JS это лямбда, в C++ IIRC это другое.

ingvar
8 августа 2021 в 23:10
2

Это просто синтаксический сахар для написания методов на C#.

avatar
Andre.Santarosa
8 августа 2021 в 23:02
2

Это способ написать метод, в вашем случае метод конструктора.

Ваш класс имеет (или наследует) эти два свойства Name и DateJoined Ваш конструктор получает их значения (используя кортежи) с целью инициализации этих свойств.

Это делает то же самое, но ваш пример короче.

public SampleCustomer(string name, DateTime dateJoined)
{
    Name = name;
    DateJoined = dateJoined;
}

Оператор => позволяет опустить {}

netfed
8 августа 2021 в 23:15
0

Просто разглагольствование: невероятно, что в документации им удалось объяснить это явление так: docs.microsoft.com/en-us/dotnet/csharp/language-reference/….

Caius Jard
8 августа 2021 в 23:25
1

@netfed Я не могу понять, считаете ли вы это удивительным или ужасным. Я даже не могу понять, что вы считаете удивительным/ужасным. Может ли что-то, закодированное в компиляторе и соответствующее строгому набору задокументированных правил, действительно называться «феноменом»?

netfed
8 августа 2021 в 23:36
0

факт или событие, представляющее научный интерес, поддающееся научному описанию и объяснению. Не будем здесь вдаваться в философские дебаты. Тем не менее, на вопрос был дан исчерпывающий ответ.