C#引用名称空间隐藏类名称空间

mey*_*ann 14 c# visual-studio

我有一个这样的课:

namespace Token1.Token2.Token3
{
    public class Class1
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

而另一个类是这样的:

namespace Token2.Token4.Token5
{
    public class Class1
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个类是我项目的一部分,第二个类来自我组织中另一个组开发的框架库.请注意,第一个类的名称空间在第二个位置具有Token2,而第二个类的名称空间在第一个位置具有Token2.

我遇到的问题是我似乎无法在第一个类中引用第二个类,因为它看起来像命名空间冲突.如果我尝试在第一堂课中这样做:

namespace Token1.Token2.Token3
{
    public class Class1
    {
        var frameworkClass1 = new Token2.Token4.Token5.Class1();
    }
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio IDE以红色突出显示Token4,并显示"无法解析符号'Token4'".如果我将鼠标悬停在Token2上,我正在新建Class1,intellisense会向我显示"名称空间Token1.Token2",因此它清楚地看到了我的项目类的命名空间而没有看到我的框架类的命名空间.

由于已经存在大量代码,因此很难更改任一类库的名称空间.有办法解决这个问题吗?

D S*_*ley 26

既然Token2也是一个子命名空间,Token1你需要指定你正在寻找"root"命名空间:

var frameworkClass1 = new global::Token2.Token4.Token5.Class1();
Run Code Online (Sandbox Code Playgroud)

您也可以使用using语句对其进行别名:

using Token5 = global::Token2.Token4.Token5;
Run Code Online (Sandbox Code Playgroud)

然后只需引用别名:

var frameworkClass1 = new Token5.Class1();
Run Code Online (Sandbox Code Playgroud)