将Lambda表达式附加到C#程序的main方法有什么结果? - c#

简而言之,我想知道为什么以下代码会编译和运行。

using System;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args) => Console.WriteLine("Hello World!");
    }
}

我对C#的有限了解是告诉我创建了一个名称为Main的Delegate,并且由于某种原因,编译器/运行时接受此Delegate作为程序的有效起点。我的理解正确吗?是否有特定原因会使用这样的语句?

我在查看Roslyn源代码时遇到了这个问题,找到了here。

// Copyright (c) Microsoft.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.

using System.IO;
using Microsoft.CodeAnalysis.CommandLine;
using Roslyn.Utilities;
using System;

namespace Microsoft.CodeAnalysis.CSharp.CommandLine
{
    public class Program
    {
        public static int Main(string[] args)
            => Main(args, Array.Empty<string>());

        public static int Main(string[] args, string[] extraArgs)
            => DesktopBuildClient.Run(args, extraArgs, RequestLanguage.CSharpCompile, Csc.Run, new DesktopAnalyzerAssemblyLoader());

        public static int Run(string[] args, string clientDir, string workingDir, string sdkDir, string tempDir, TextWriter textWriter, IAnalyzerAssemblyLoader analyzerLoader)
            => Csc.Run(args, new BuildPaths(clientDir: clientDir, workingDir: workingDir, sdkDir: sdkDir, tempDir: tempDir), textWriter, analyzerLoader);
    }
}

谢谢。

参考方案

public static void Main(string[] args) => Console.WriteLine("Hello World!");

不是委托,因为没有delegate关键字。这只是一种方法/功能。它的编写方式只是C#6中引入的编写简单方法/函数的简便方式。它称为表达式合并函数。请参见C# : The New and Improved C# 6.0。

Lambda Java中的此参考 - java

我想将anonymous class转换为lambda expression。但是这个匿名类我使用this关键字。例如,我写了这个简单的Observer/Observable模式:import java.util.ArrayList; import java.util.Collection; public static class Observable { …

Java string.hashcode()提供不同的值 - java

我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

string.split(“ _(B”) - java

基本上,这行代码行不通,我不确定原因: String[] stringHolder = string.split("_(B"); 我收到此错误:索引3附近的未封闭组此行代码有效: String[] stringHolder = string.split("_B"); 因此,这使我相信它是由“(”引起的。有人可以告诉我如…

php-ga解析错误:语法错误,意外的T_STRING - php

我正在尝试进行服务器端Google Analytics(分析)跟踪,并遇到了php-ga。由于某种原因,这会引发错误:解析错误:语法错误,意外的T_STRING,在第85行的/home/priedelc/public_html/refll/api_ga.php中预期为T_CONSTANT_ENCAPSED_STRING或'('-其中85是使用UnitedPr…

为什么jvm每次我们使用new关键字创建字符串时都会创建新字符串对象 - java

如果jvm创建string pool进行内存优化,那么为什么每次我们使用new关键字创建字符串时,即使它存在于string pool中,它也会创建新的Object呢? 参考方案 ...为什么每次我们使用new关键字创建字符串时,即使字符串池中存在Java,Java也会创建新的Object?因为您明确告诉过! new运算符始终创建一个新对象。 JLS 15.9…