System.Console解析为错误的命名空间

时间:2016-10-17 12:47:13

标签: c#

我有一个名为

的简单控制台应用程序
something.service.console

问题在于我尝试使用

Console.WriteLine("something");

我得到编译错误:类型或命名空间名称“WriteLine”dos在命名空间something.service.console中不存在。

所以,除非我使用

System.Console.WriteLine("something");

C#编译器正在尝试将WriteLine方法解析为错误的命名空间(“something.service.console”)。 在这种情况下,是否可以强制编译器将Console.WriteLine解析为正确的命名空间“System”(而不是重命名我的命名空间:))?

谢谢。

3 个答案:

答案 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");
        }
    }
}