2017-02-28 33 views
2

如何訪問中的根名字空間debug雖然我們在命名空間裏面用重複 name?如何在調試中訪問根名字空間

例如:

根命名空間:項目

命名空間捧住斷點:項目 .Models。 項目(通知重複的項目部分)。

代碼:

using Project.Models.Project; 

namespace Project 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      new Foo().Bar(); 
     } 
    } 

    namespace Models 
    { 
     namespace Project 
     { 
      public class Foo 
      { 
       public void Bar() 
       { 
        //breakpoint! in this moment I want to access to Bar class (there is no `using Project.Models.Issue;` above) 
        //var boo = new Boo(); Cannot resolve symbol 'Boo' 
       } 
      } 
     } 

     namespace Issue 
     { 
      public class Boo { } 
     } 
    } 
} 

監視窗口:

watch window

有隻能訪問嵌套項目命名空間(Project.Models.Project),但我無法使用root訪問命名空間同名並轉到Project.Models.Issues.Boo

任何想法?

回答

2

您可以使用全局命名空間別名(global::),以表明您想從根名稱空間開始:

var boo = new global::Project.Models.Issues.Boo() 

正如@ rory.ap已經正確地指出,在這種情況下,你也離不開誰全局命名空間別名,但有時它是你唯一的選擇。考慮下面這個例子:

namespace Foo { 
    class Bar {} 
    namespace Bat { 
     namespace Foo { 
      class Bar {} 
     } 
     static class Test { 
      public static void AccessNS() { 
       //The global:: alias is necessary here to avoid a creating a Foo.Bat.Foo.Bar() 
       var fooBar = new global::Foo.Bar(); 
      } 
     } 
    } 
} 
2

你可以這樣做:

var boo = new Models.Issue.Boo(); 

編譯器是輕度的意識模糊,因爲多Project命名空間,但在該範圍內,你只需要限定它開始與Models命名空間。

,你可以做些什麼來幫助不同Project命名空間之間的編譯器識別的另一件事是使用別名來Projectusing指令:

using Project.Models.Project; 
using p = Project; 

那麼這將工作:

var boo = new p.Models.Issue.Boo(); 

Sefe的答案提供了另一個非常好的選擇。

+0

不重複,但相關的http://stackoverflow.com/questions/125319/should-using-statements-be-inside-or-outside-the-namespace – bradbury9

+0

喔這很簡單,很好,謝謝! ;) –

+0

@PawelMaga - 請參閱我的更新。 –