C#:在两个名称空间相似时尝试解析类时出现问题

Cod*_*ike 11 c# namespaces

我遇到了一个问题,我无法在不同的命名空间中引用类.我有2个班:

namespace Foo
{
    public class Class1 { ... }
}

namespace My.App.Foo
{
    public class Class2
    {
        public void SomeMethod()
        {
            var x = new Foo.Class1; // compile error!
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译错误是:

命名空间"My.App.Foo"中不存在类型或命名空间名称"Class1"

在这种情况下,我似乎无法让Visual Studio认识到"Foo.Class1"指的是第一类.如果我将鼠标悬停在"Foo"上,则表明它试图将其解析为"My.App.Foo.Class1"

如果我把线:

using Foo;
Run Code Online (Sandbox Code Playgroud)

在包含Class2的.cs文件的顶部,然后它也将其解析为"My.App.Foo".

有没有一些技巧来引用正确的"Foo"命名空间而不只是重命名命名空间,以便它们不冲突?这两个命名空间都在同一个程序集中.

LBu*_*kin 28

您可以使用global::全局限定命名空间: global::Foo.Class1应该工作,.

您也可以使用别名global::Foo来简化操作.在源文件的顶部,在using语句下面,添加:

using AliasClass1=global::Foo.Class1;
Run Code Online (Sandbox Code Playgroud)

现在你可以使用:

AliasClass1 c = new AliasClass1();
// and so on.
Run Code Online (Sandbox Code Playgroud)

当然,你可以使用比AliasClass :-) 更好的名字