2010-05-26 16 views
11

我遇到了一個問題,我無法在不同命名空間中引用類。我有2類:C#:當兩個命名空間相似時嘗試解析類的問題

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

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

的編譯錯誤是:

類型或命名空間名稱 'Class1的' 在命名空間 'My.App.Foo'

不存在

在這種情況下,我似乎無法讓Visual Studio認識到「Foo.Class1」引用了第一個類。如果我鼠標懸停「富」,這表明它試圖解決爲「My.App.Foo.Class1」

如果我放線:

using Foo; 

在了頂部。包含Class2的cs文件,那麼它也解析爲「My.App.Foo」。

是否有一些技巧在不重命名命名空間的情況下引用正確的「Foo」命名空間,使它們不衝突?這兩個命名空間都在同一個程序集中。

回答

28

您可以使用global::來全侷限定名稱空間:global::Foo.Class1應該可以工作。

您也可以別名global::Foo,以使事情更輕鬆。在源文件的頂部,下方的using語句,添加:

using AliasClass1=global::Foo.Class1; 

現在你可以使用:

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

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

+1

頂頂丁 - 切人的支票。 – 2010-05-26 16:13:04

+1

這在我的環境中不起作用。我想你需要在:: – BlueMonkMN 2010-05-26 16:15:45

+0

@BlueMonkMN之前擁有全球性 - 是的,我剛剛收拾起來了。 – LBushkin 2010-05-26 16:16:06