新的 .NET 6 控制台模板中的 C# 函数重载不起作用

C# Function Overloading in the New .NET 6 Console Template is Not Working

我在尝试重载 new .NET 6 C# console app template(顶级语句)中的函数 Print(object) 时遇到错误。

void Print(object obj) => Print(obj, ConsoleColor.White);

void Print(object obj, ConsoleColor color)
{
    Console.ForegroundColor = color;
    Console.WriteLine(obj);
    Console.ResetColor();
}

错误是:

我试图改变他们的顺序,但它仍然会抛出错误。怎么回事?

假定 top-level 的内容是 Main 的内部结构,因此您在 Main 中声明了两个 local 函数。而且局部函数不支持重载。

您可以:

  • 切换到具有完整规格的旧样式模板 class

    class Program
    {
     static void Main(){}
    
     void Print(object obj) => Print(obj, ConsoleColor.White);
    
     void Print(object obj, ConsoleColor color)
     {
        Console.ForegroundColor = color;
        Console.WriteLine(obj);
        Console.ResetColor(); 
     }
    }
    
  • 继续使用新模板,但将您的函数包装到单独的 class

    var c = new C();
    c.Print("test");
    
    public class C{
      public void Print(object obj) => Print(obj, ConsoleColor.White);
    
         void Print(object obj, ConsoleColor color)
         {
            Console.ForegroundColor = color;
            Console.WriteLine(obj);
            Console.ResetColor(); 
         }
    

    }

相关 github 问题的一些技术细节:https://github.com/dotnet/docs/issues/28231