新的 .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();
}
错误是:
- 从
Print(obj, ConsoleColor.White)
-> No overload for method Print() that takes 2 arguments
- 从
Print(object obj, ConsoleColor color)
-> A local variable or function named 'Print' is already defined in this scope
我试图改变他们的顺序,但它仍然会抛出错误。怎么回事?
假定 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
我在尝试重载 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)
->No overload for method Print() that takes 2 arguments
- 从
Print(object obj, ConsoleColor color)
->A local variable or function named 'Print' is already defined in this scope
我试图改变他们的顺序,但它仍然会抛出错误。怎么回事?
假定 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