C#9.0新简化方法 -miguel


关于C#的主要抱怨之一是它是一种非常冗长的语言。要引导一个简单的Hello World,您需要12行代码!!!

using System;

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

随着Python和F#等语法更轻便的新语言的兴起,Microsoft知道必须做出一些更改才能将C#保留在游戏中。考虑到这一点,C#9.0正在将第一步迈向该Main方法(即顶级程序)的更简单语法。
现在,您可以用两行编写相同的Hello World!这还差不多。

using System;
Console.WriteLine("Hello World!");

但是在现实世界中可行吗?如果我的程序通过args参数接受参数会怎样?幸运的是,args始终在program.cs文件范围内的魔术kinda-global变量支持它。您不需要声明它;您可以直接使用它,就像它来自一样Main(string[] args)。

异步
从C#7.1开始,还可以使您的Main方法异步并返回Task或Task<T>。

static async Task<int> Main()
{
    return await DoAsyncWork();
}

在C#9.0中:

using System;

var service = new AsyncService();
var result = await service.MyAsyncMethod();
Console.WriteLine($"Hello {result}!");

将它扔进await去,它就可以直接使用,没有特殊说明或奇怪的语法关键字。

返回
如果我尝试破坏新的自动魔术Main功能,最后想到的是返回码。一些程序使用返回码来向调用者提示执行结果。通常,0用于成功,1表示错误。

using System;

Console.WriteLine($"Hello world!");
return 1;


所有结合在一起:

var s = new AsyncService();
var result = await s.MyAsyncMethod();
Console.WriteLine($"Hello {args[0]}! result: {result}");
return 1;

这是一个试图一次组合所有内容的示例。我着迷于此功能的运行情况。我一直是F#简约语法的忠实拥护者,并且很高兴看到一些概念转向C#。

可以在我的github仓库中找到所有代码示例