2013-07-25 54 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;