Лямбда-оператор в основном проекте .net - PullRequest
0 голосов
/ 05 октября 2018

Может быть глупо, но озадачено этим.

Когда я создал новый пустой основной проект .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>();

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

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

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

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

Getter-only Properties

public int Value => 42;

Получатель и установщик

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

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

(свойства выражения выражения являются новыми в C # 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;

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

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

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

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

Конструкторы, которые устанавливают multiple values ​​

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

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

0 голосов
/ 05 октября 2018

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

Это

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

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

public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
   return  WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...