2017-06-15 66 views
0

的,我有以下的名稱:編譯器抱怨所丟失的命名空間是類

// Generator.cs 
namespace MRP 
{ 
    public class Generator 
    { 
     public enum ModeGeneration 
     { 
      ByRequest, 
      ByCommit 
     } 
    } 
} 

// CustomerOrderWrapper.cs 
namespace MRP 
{ 
    class CustomerOrderWrapper 
    { 
     readonly ModeGeneration _mode; 
    } 
} 

爲什麼我收到的命名空間名稱「ModeGeneration」找不到一個錯誤。這兩個類都在MRP名稱空間下,爲什麼編譯器在'ModeGeneration'命名空間上抱怨?

+0

'class CustomerOrderWrapper:Generator'?可能需要在'CustomerOrderWrapper'中擴展'Generator'類以訪問枚舉。 –

回答

2

再次閱讀錯誤消息。它應該說類似「無法找到類或名稱空間ModeGeneration」,並且它是正確的,沒有名爲ModeGeneration的類/名稱空間,也許你想要Generator.ModeGeneration

作爲一個內部類,Generator.ModeGeneration是整個類型名稱,並且不能省略外部類的名字,因爲你可以在C#中定義一些內部類具有相同的名稱是這樣的:

namespace Foo 
{ 
    class One 
    { 
     public class Bar { } 
    } 

    class Another 
    { 
     public class Bar { } 
    } 
} 

你可以看到Bar不明確。您應該使用One.BarAnother.Bar

+0

你是說在我上面的例子中,enum是在類內類似於在這個上下文中有類內的類嗎?如果我有一個屬性而不是枚舉,我不會收到編譯錯誤。 – ehh

+0

這不是一個有問題的問題,它沒有被發現,因爲枚舉是在類中定義的(不知道它是整數還是小數)。羅馬和阿布舍克說得對。 – bradbury9

+0

@ bradbury9我在解釋「他們爲什麼要這樣設計」,或者說「爲什麼外部類名不能省略」。 –

1

是的,它們在同一個命名空間中,但enum ModeGeneration也在Generator類中。因此,要麼:

  • enumGenerator類外,並把它作爲你

  • 前綴ModeGeneration在CustomerOrderWrapper.cs與發電機 - Generator.ModeGeneration
1

這是因爲你的枚舉是在中定義的類。更改代碼如下:

namespace MRP 
{ 
    class CustomerOrderWrapper 
    { 
     readonly Generator.ModeGeneration _mode; 
    } 
} 
1

有兩種方法來解決這個問題

方法1)您可以使用類名放在枚舉的前

namespace MRP 
{ 
    public class Generator 
    { 
     public enum ModeGeneration 
     { 
      ByRequest, 
      ByCommit 
     } 
    } 
} 

// CustomerOrderWrapper.cs 
namespace MRP 
{ 
    class CustomerOrderWrapper 
    { 
     readonly Generator.ModeGeneration _mode; 
    } 
} 

方法2),您可以將enum從課堂上拉出來命名空間

namespace MRP 
{ 
public enum ModeGeneration 
     { 
      ByRequest, 
      ByCommit 
     } 
    public class Generator 
    { 

    } 
} 

// CustomerOrderWrapper.cs 
namespace MRP 
{ 
    class CustomerOrderWrapper 
    { 
     readonly ModeGeneration _mode; 
    } 
} 

我希望它能幫助你。