Может быть, это глупо, но в тупике.
Когда я создал новый пустой проект.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>();
Символ =>
имеет разные значения в разных частях вашего кода на С#. Конкретная часть, о которой вы спрашиваете, называется методом выражения.
Вы можете использовать это, чтобы объявлять методы, которые имеют только один оператор. Если оператор возвращает значение, и метод объявлен для возврата значения, он также неявно возвращает значение из инструкции.
Вот примеры методов выражения:
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);
(обратите внимание, что в этом последнем примере также используются кортежи, используйте этот синтаксис для конструкторов ответственно)
Вы можете использовать его вместо фигурных скобок, если вы просто возвращаете одно выражение.
это
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
То же самое, что и
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
}