.NET 6:如何在控制台应用启动时使用方法重载?

.NET 6: How to use method overloading in console app Startup?

.NET 6 在控制台应用程序启动 class 中提供样板文件删除功能。我尝试 运行 这个简单的测试代码:

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

static void Test(int a, int b) { }

static void Test(int a, int b, int c) { }

我在最后一行遇到编译器错误:

Error   CS0128  A local variable or function named 'Test' is already defined in this scope

我的问题是:如何在样板免费启动模式中使用方法重载?

这个

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

static void Test(int a, int b) { }

编译为

[CompilerGenerated]
internal class Program
{
    private static void <Main>$(string[] args)
    {
        Console.WriteLine("Hello, World!");
        static void Test(int a, int b)
        {
        }
    }
}

你看这个方法是本地方法,即在Main里面声明。不能有 2 个同名的局部函数。这也失败了;

https://github.com/dotnet/docs/issues/17275

namespace Foo {
    class Program {

      //  SerialPort port;  
        static void Main(string[] args) {
            static void Test(int a) { };
            static void Test(int a, int b) { };

    }
}

出于同样的原因。新的简短 Main 语法有很多限制

你仍然可以创建一个class并把你想重载的所有方法都放进去。我就是这么做的。即使您可以添加访问修饰符,它也能正常工作,因为正如 所说,方法 after compilation 位于 main 方法

[CompilerGenerated]
internal class Program
{
  private static void <Main>$(string[] args)
   {
       Console.WriteLine("Hello, World!");
       static void Test(int a, int b)
       {
       }
   }
}

所以访问修饰符也是一样的,但希望下一个版本的 .NET 不会再有这个问题,但现在你总是可以使用以前的版本 “主要”方法。