2013-07-25 51 views
2

這裏是一個存在於CPSLibrary類庫我Enums.cs文件:爲什麼命名空間的命名約定不適用於我的Enum?

namespace CPSLibrary.CPSEnums 
{ 
    public enum GoalType 
    { 
     STRATEGIC = 1, 
     TACTICAL = 2 
    } 
} 

在web應用中引用CPSLibrary內隱藏文件代碼,我做了以下內容:

using CPSLibrary; 

/* ... farther down the page ... */ 
proj.Goal == CPSLibrary.CPSEnums.GoalType.STRATEGIC; 

這將工作,但如果我嘗試只引用它像CPSEnums.GoalType.STRATEGIC它不會。另外,如果我添加「使用CPSLibary.CPSEnums」,那麼我可以簡單地將它作爲GoalType.STRATEGIC來引用。

我需要做些什麼才能識別CPSEnums.GoalType.STRATEGIC?

奇怪的是,其他具有CPSLibrary類庫的類可以引用它作爲CPSEnums.GoalType.STRATEGIC就好了。

紅利問題:在本例中,「CPSEnums」是否有技術術語? 「容器」或類似的東西?或者它只是名稱空間的一部分,沒有單獨的術語?

TIA

+0

爲什麼要編寫'CPSEnums.GoalType.STRATEGIC'而不是'GoalType.STRATEGIC'?這是更多的9個按鍵! –

+0

只是一個個人的怪癖,我猜 - 在某些事情上(比如枚舉),我喜歡在代碼中看到一些「組織」,而沒有在它上面懸停。 – cavillac

回答

4

試着改變你的using語句來這...

using CPSEnums = CPSLibrary.CPSEnums; 

這應該允許您引用它,你想要的方式...

/* ... farther down the page ... */ 
proj.Goal == CPSEnums.GoalType.STRATEGIC; 
+0

完美運作!謝謝 – cavillac

0

因爲你的命名空間名稱是CPSLibrary.CPSEnums,所以你甚至可以這樣寫:

using CPSLibrary.CPSEnums; 
.... 
proj.Goal == GoalType.STRATEGIC; //NO NAMESPACE NAME 

當你寫using CPSLibrary,你是指的你定義一個「父」命名空間。這是完全有效的。但訪問枚舉類型,則需要指定 namepsace,並命名空間:CPSLibrary.CPSEnums

+0

我認爲這將是可能的答案,但它並不能解釋爲什麼該結構保留在類庫本身內,但在編譯後似乎變得平坦。如果我在CPSLibrary命名空間的另一個類中,則可以使用CPSEnums來獲取GoalType,但如果沒有對CPSEnums的引用,我將無法直接轉到GoalType。如果它確實是一個單獨的命名空間,那麼我需要使用CPSLibrary.CPSEnums才能獲得GoalType。在那裏它作爲一個「文件夾式」結構工作,但一旦它被編譯就會全部消失?這是爲什麼? – cavillac

0

試試這個:

namespace CPSLibrary 
{ 
    public static class CPSEnums 
    { 
     public enum GoalType 
     { 
      STRATEGIC = 1, 
      TACTICAL = 2 
     } 
    } 
} 


var x = CPSEnums.GoalType.STRATEGIC;