C# Console Project 控制台專案的頂級語句介紹和恢復以前版本的方式

從 .NET 6 (C# 10)開始,建立控制台專案(Console Application)後在應用程式入口的 Program.cs 檔案中,已經被簡化為下面這個樣子:
    
// See https://aka.ms/new-console-template for more information

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

依照官方說法,這是 C# 的最新功能 — top-level statements,可以簡化程式撰寫。編譯器會自動合成一個 Program 類別,並將所有頂級語句放在其中 Main 方法,也就是目前直接寫在 Program.cs 程式碼的部分會被視為 Main 方法中的一部份。

雖然在程式碼裡面沒有看到 args,不過其實依然可以存取 args 參數,執行程式時傳入的參數會被正常顯示。
    
// See https://aka.ms/new-console-template for more information

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

// 顯示傳入參數
foreach (var arg in args)
{
    Console.WriteLine(arg);
}

    

Github issues - Should the console project template use top-level statements #27420 中有許多人反對這樣簡化的方式,也有人覺得和其他文件不一致,在一開始會無法理解為什麼 Program.cs 和其他程式碼檔案的規則不同。

恢復舊版的 Program.cs 樣式

微軟官方的 Use the old program style 建議中,建立 .NET 5 專案,就會以舊的樣式產生。然後將 <TargetFramework> 改為 net6.0

這樣的作法似乎有些奇怪,畢竟為了使用舊的樣式,需要先安裝 .NET 5,建立好專案後再手動將專案「升級」

其實有個比較簡單的做法,就是直接在 Program.cs 檔案中手動以「舊的樣式」寫一遍即可
    
public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Hello World! 111");

        foreach (var arg in args)
        {
            Console.WriteLine(arg);
        }
    }
}
    

不知道各位對這種新的寫法有什麼感想?筆者是覺得雖然平時開新專案測試程式時程式碼好像有比較少、比較簡潔,但還是以前的寫法比較習慣,不過現在除了比較大型的程式要在 Program.cs 寫比較多程式時會使用舊的寫法以外,其他的都會依照官方建議的撰寫,不會刻意切換回去,畢竟已經是確定的改變了,只是如果不熟悉 .NET 6 的朋友問到時可能就要稍微解釋一下就是了。

留言