Лямбда-оператор в основном проекте .net

2

Может быть, это глупо, но в тупике.

Когда я создал новый пустой проект.net с использованием VS 2017, у меня есть этот файл Program.cs.

Класс программы в файле выглядит следующим образом.

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
       WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
}

Я не могу понять, что происходит в последней строке, особенно после лямбда-оператора (=>)? Это не похоже на лямбда-выражение. Что это такое?

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

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
Теги:
asp.net-core

2 ответа

3
Лучший ответ

Символ => имеет разные значения в разных частях вашего кода на С#. Конкретная часть, о которой вы спрашиваете, называется методом выражения.

Вы можете использовать это, чтобы объявлять методы, которые имеют только один оператор. Если оператор возвращает значение, и метод объявлен для возврата значения, он также неявно возвращает значение из инструкции.

Вот примеры методов выражения:

Свойства только для Getter

public int Value => 42;

Геттер и сеттеры

public int Value
{
    get => _Value;
    set => _Value = value;
}

(обратите внимание, что вы также можете смешивать и сопоставлять это с традиционным синтаксисом, поэтому у вас есть метод с выраженным выражением геттера и традиционный сеттер с фигурными фигурными скобками)

(свойства с выраженными свойствами являются новыми в С# 7)

методы

public void WriteLog(string message) => Console.WriteLine(message);
public int Sum(int a, int b) => a + b;

(первый метод ничего не возвращает, поэтому, хотя имя синтаксиса содержит "выражение", ему не нужно что-то оценивать)

Конструкторы

public class Test
{
    private readonly int _Value;
    public Test(int value) => _Value = value;

(конструкторы с выраженным выражением являются новыми в С# 7)

Деструктор (финализатор)

public class Test : IDisposable
{
    ~Test() => Dispose(false);

(экспрессирующие деструкторы являются новыми в С# 7)

Конструкторы, которые устанавливают несколько значений

public class Test
{
    private readonly int _A;
    private readonly int _B;
    public Test(int a, int b) => (_A, _B) = (a, b);

(обратите внимание, что в этом последнем примере также используются кортежи, используйте этот синтаксис для конструкторов ответственно)

4

Вы можете использовать его вместо фигурных скобок, если вы просто возвращаете одно выражение.

это

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
   WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();

То же самое, что и

public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
   return  WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню