我有一个名为
的简单控制台应用程序something.service.console
问题在于我尝试使用
Console.WriteLine("something");
我得到编译错误:类型或命名空间名称“WriteLine”dos在命名空间something.service.console中不存在。
所以,除非我使用
System.Console.WriteLine("something");
C#编译器正在尝试将WriteLine方法解析为错误的命名空间(“something.service.console”)。 在这种情况下,是否可以强制编译器将Console.WriteLine解析为正确的命名空间“System”(而不是重命名我的命名空间:))?
谢谢。
答案 0 :(得分:4)
你可以"强迫"它是这样的:
using SysConsole = System.Console;
现在,只要您使用Console
,就会引用System.Console
public class Console
{
private void Test()
{
SysConsole.WriteLine("something");
}
}
注意:使用时确实没什么不好的:
System.Console.WriteLine()
并且您应该避免使用.NET Framework中已存在的类名。
答案 1 :(得分:3)
编译器在找到命名空间something.service
之前会找到命名空间System
,因此它会假设
Console.WriteLine("something");
实际上意味着
something.serviceConsole.WriteLine("something");
因此你的错误。
当遇到如下问题时,两种可能的解决方案是完全限定命名空间:
System.Console.WriteLine("something");
或更改名称空间的名称,使其不是something.service.console
,而是something.service.somethinglese
。
答案 2 :(得分:2)
使用C#6功能"使用静态"您可以更改代码,以避免模糊名称Console
,而不会使代码混乱。
如果代码中出现了很多System.Console.WriteLine
次调用,这是有道理的。
using static System.Console;
namespace SomeNamespace.Console
{
public class SomeClass
{
public void SomeMethod()
{
WriteLine("abc");
}
}
}