C# 9.0 で Hello World が簡単になる

2021/09/02に公開

11 月にリリース予定の C# 9.0 でトップレベルステートメントが導入され、namespace や class を省略して文を直接トップレベルに書けるようになります。

C# 9.0 の新機能 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

これによって次のように Hello World がとてもシンプルに書けるようになります。

従来

using System;

namespace ConsoleApp1
{
	class Program
	{
		static void Main()
		{
			Console.WriteLine("Hello World!");
		}
	}
}

C# 9.0

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

C# 9.0 を今すぐ使いたい場合には Visual Studio Preview が必要です。
Visual Studio Preview

そしてプロジェクトファイルの TargetFramework を次のように net5 に書き換えてください。以上で使えるようになります。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5</TargetFramework>
  </PropertyGroup>
</Project>

C# 8.0 からの switch 式とパターンマッチングを使うと、FizzBuzz も次のようにシンプルに書くことができます。

using static System.Console;

for (int i = 1; i < 1000; i++) WriteLine((i % 3, i % 5) switch
{
	(0, 0) => "FizzBuzz",
	(0, _) => "Fizz",
	(_, 0) => "Buzz",
	_ => i.ToString()
});

ただこのトップレベルステートメント、Main メソッドを自動生成してるだけだから、他のクラスには使えないんですよね。Main メソッドに何かを長々と書くことなんかふつうないし、ここで定義された関数はローカル関数でテストの対象にならないので、ちょっとしたスクリプトを書く時以外には役に立たないのがなんとも。

次のように、名前空間とクラスをネストせず書けるようにするだけの方が使いやすかったと思うんですよね。

using System;

namespace ConsoleApp1;
public class Program;

static void Main()
{
    Console.WriteLine("Hello World!");
}

執筆日: 2020/08/06

GitHubで編集を提案

Discussion