.net核心项目中的Lambda运算符

Viv*_*Dev 3 c# asp.net-core

可能很愚蠢,但却为此感到困惑。

当我使用VS 2017创建一个新的空.net核心项目时,我有了这个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>();
}
Run Code Online (Sandbox Code Playgroud)

我无法获取最后一行中发生的事情,特别是在lambda运算符(=>)之后吗?那似乎不是lambda表达式。那是什么?

有人可以解释一下以下内容。我知道lambda表达式,但无法弄清楚。

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)

小智 6

如果仅返回单个表达式,则可以使用它而不是花括号。

这个

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
   WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)

与此相同

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


ang*_*son 5

=>符号在 C# 代码的不同部分具有不同的含义。您在这里询问的特定部分称为Expression Bodied Method

您可以使用它来声明只有一条语句的方法。如果该语句返回一个值,并且该方法被声明为返回一个值,那么它也将隐式返回该语句中的值。

以下是表达式主体方法的示例:

仅吸气剂属性

public int Value => 42;
Run Code Online (Sandbox Code Playgroud)

吸气剂和吸气剂

public int Value
{
    get => _Value;
    set => _Value = value;
}
Run Code Online (Sandbox Code Playgroud)

(请注意,您还可以将其与传统语法混合搭配,这样您就有了一个表达式主体的 getter 方法和带大括号的传统 setter)

(表达式主体属性是 C# 7 中的新增属性)

方法

public void WriteLog(string message) => Console.WriteLine(message);
public int Sum(int a, int b) => a + b;
Run Code Online (Sandbox Code Playgroud)

(第一个方法不返回任何内容,因此虽然语法名称包含“表达式”,但它不必计算结果)

构造函数

public class Test
{
    private readonly int _Value;
    public Test(int value) => _Value = value;
Run Code Online (Sandbox Code Playgroud)

(表达式主体构造函数是 C# 7 中的新增内容)

析构函数(终结器)

public class Test : IDisposable
{
    ~Test() => Dispose(false);
Run Code Online (Sandbox Code Playgroud)

(表达式主体析构函数是 C# 7 中的新功能)

设置多个值的构造函数

public class Test
{
    private readonly int _A;
    private readonly int _B;
    public Test(int a, int b) => (_A, _B) = (a, b);
Run Code Online (Sandbox Code Playgroud)

(请注意,最后一个示例也使用元组,请负责任地对构造函数使用此语法