开发者

C#: Problem trying to resolve a class when two namespaces are similar

I'm running into an issue where I can't make a reference to a class in a different namespace. I have 2 classes:

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

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

The compile error is:

The type or namespace name 'Class1' does not exist in the namespace 'My.App.Foo'

In this situation, I can't seem to get Visual Studio to recognize that "Foo.Class1" refers to the first class. If I mouse-over "Foo", it shows that its trying to resolve that to "My.App.Foo.Class1"

If I put the line:

using Foo;

at the top of the .cs file that contains Class2, then it also resolves that to "My.App.Foo".

Is there some trick to referencing开发者_如何学JAVA the right "Foo" namespace without just renaming the namespaces so they don't conflict? Both of these namespaces are in the same assembly.


You can use global:: to globally qualify a namespace: global::Foo.Class1 should work,.

You could also alias global::Foo to make things easier. At the top of your source file, below your using statements, add:

using AliasClass1=global::Foo.Class1;

Now you can use:

AliasClass1 c = new AliasClass1();
// and so on.

Of course, you can use a better name than AliasClass :-)


var x = new global::Foo.Class1();


In addition to LBushkin's answer, you might be interested in these articles by Eric Lippert :

Do not name a class the same as its namespace, Part One
Do not name a class the same as its namespace, Part Two
Do not name a class the same as its namespace, Part Three
Do not name a class the same as its namespace, Part Four

They are not directly related to your problem, but they give an interesting insight on naming strategies

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜