相关文章推荐
行走的苹果  ·  C# ...·  1 月前    · 
小胡子的皮带  ·  C# 中的ushort - CSDN文库·  1 月前    · 
近视的包子  ·  Semi-Annual 通道 (目標) ...·  1 年前    · 
酒量小的领带  ·  Random Remote Server ...·  1 年前    · 
首发于 码农

新的 C# 模板生成顶级语句

一. . NET 6模板生成顶级语句

从 .NET 6 Preview 开始,控制台应用模板生成以下代码:

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

新的输出使用最新的 C# 功能,这些功能简化了需要为程序编写的代码。 通常,控制台应用模板生成以下代码:

在之前 创建控制台是会生成下面代码:

using System;
namespace ConsoleApp3
    class Program
        static void Main(string[] args)
            Console.WriteLine("Hello World!");


其实 在net5.0 (C# 9.0)已经支持顶级语句,只是生成模板的时候仍然有main方法

net 5.0 可以这样简化:

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

只是到.net6.0(C#10.0)模板使用新程序更简单的顶级语句、全局 using 指令和隐式 using 指令 。

顶级语句 意味着编译器会为主程序生成命名空间、类和方法元素。 你可以查看新应用程序的代码,并假设它包含早期模板所生成的 Main 方法内的语句。 你可以向程序添加更多语句,就像用传统方式将更多语句添加到 Main 方法一样。 甚至可以添加函数。 它们被创建为嵌套在生成的 Main 方法中的本地函数。

全局 using 指令意味着编译器会根据项目类型自动导入一组 using 指令。 对于控制台应用程序,以下指令隐式包含在应用程序的每个源文件中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Json;

其他应用程序类型包括更多对这些应用程序类型通用的命名空间。

这两种功能可简化构成应用程序的代码。 若要按照现有教程操作,请将所有新语句添加到模板生成的 Program.cs 文件中。 假设在本教程的说明中,你编写的语句位于 Main 方法中的左大括号和右大括号之间。

如果你更喜欢使用较旧的格式,则可以复制本文第二个示例中的代码,并像以前一样使用。


二.简化后的args

对于包含顶级语句的单个源文件,编译器会将 args 识别为表示命令行参数。 参数的类型是一个 string[] ,就像在所有 C# 程序中一样。

Console.WriteLine();
foreach (var s1 in args)
    Console.Write(s1);
    Console.Write(' ');
Console.WriteLine();
Console.WriteLine(args);
Console.ReadKey();

三.底层看看:

Console.WriteLine($"Mtehod Name:{System.Reflection.MethodBase.GetCurrentMethod().Name}");
Console.WriteLine($"Mtehod Name:{System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name}");
Console.WriteLine($"Mtehod Name:{System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Namespace}");