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

标签 c# .net visual-studio console

我在尝试重载 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();
}

错误是:

  • 来自 Print(obj, ConsoleColor.White) -> 方法 Print() 没有重载,该方法采用 2 个参数
  • 来自 Print(object obj, ConsoleColor color) -> 一个名为“Print”的局部变量或函数已在此范围内定义

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

最佳答案

顶层的内容被假定为 Main 的内部结构,因此您在 Main 中声明了两个 local 函数。并且本地函数不支持重载。

您可以:

  • 切换到具有完整类规范的旧样式模板

    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(); 
     }
    }
    
  • 继续使用新模板,但将您的函数包装到单独的类中

    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 isse 和一些技术细节:https://github.com/dotnet/docs/issues/28231

关于新的 .NET 6 控制台模板中的 C# 函数重载不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72234567/

相关文章:

.net - ZedGraph 库的开发仍然活跃吗?如果没有 - 有任何开源替代品吗?

c# - 如何在 C# 中获得对枚举类型的全局访问权限?

visual-studio - 保存 Visual Studio 状态

c# - Visual Studio 2017 + Entity Framework + 身份 + mysql 不工作

c++ - Qt项目C2872错误,生成的ui文件中符号不明确

c# - 通过 HTTP 向客户端发送字节数组时操作缓慢且无响应主体

c# - 使用 C# 进行 XML 解析?

c# - 忽略 WPF 应用程序中的 Alt+F4

.net - 在 .net 中使用 slim Fitnesse 的分步教程

c# - 未找到 RelayCommand 的引用