2009-07-13 16 views
3

私はVS2005でC#を使用しています。私はいくつかのプロジェクトに共通のいくつかの列挙型を含むクラスライブラリを持っています。これらの列挙型の1つにアクセスするとき、列挙型を含む名前空間に 'using'ディレクティブを宣言したにもかかわらず、列挙型全体の名前空間パスを指定する必要があります。例えば異なる名前空間の列挙型へのアクセス

私は、次の列挙型があります:私はクラスを含むプロジェクトを参照する「を使用」ディレクティブを持っているにもかかわらず

using Company.General.Project1; 

namespace Company.SpecialProject.Processing 
{ 
    public class MixingPallette 
    { 
    int myValue = Company.General.Project1.Colours.Red; 
    } 
} 

:私は別のプロジェクトに続いて

namespace Company.General.Project1 
{ 
    public static class Rainbow 
    { 
    [Flags] 
    public enum Colours 
    { 
     Red, 
     Blue, 
     Orange 
    } 
    } 
} 

を列挙型、私はまだ列挙型の長さを記述する必要があります。 なぜ私は次の操作を行うことができない...

using Company.General.Project1; 

namespace Company.SpecialProject.Processing 
{ 
    public class MixingPallette 
    { 
    int myValue = Colours.Red; 
    } 
} 

答えて

15

あなたの列挙は単なる名前空間ではありません - それは、ネストされたタイプです。実際には、あなたのサンプル「作業」のコードが動作しない、それが

int myValue = (int) Company.General.Project1.Rainbow.Colours.Red; 

でなければならないであろう(あなたはRainbow部分を含める必要がありますが、int型の列挙型からの暗黙的な変換もありませんしないだけで。 )

あなたの列挙トップレベルのタイプしてください:

namespace Company.General.Project1 
{ 
    [Flags] 
    public enum Colours 
    { 
     Red, 
     Blue, 
     Orange 
    } 
} 

次にあなたが書くことができるようになります:

using Company.General.Project1; 

... 

Colours x = Colours.Red; 
int y = (int) Colours.Red; 

[Flags]を効果的に使用するには、値を明示的に割り当てる必要があります。 1、2、4、8 ...)


編集:私はあなたが本当にあなたがネストされたタイプを使用して、あなたの現在の構造を維持することができColours.Redなどを使用することができるようにしたいんと仮定してきましたそして、次のように書いてください:

Rainbow.Colours x = Rainbow.Colours.Red; 
int y = (int) Rainbow.Colours.Red; 

ただし、enumをネストする特別な理由がない限り、私はそうしません。

+0

や 'int型myValue =(int型)Rainbow.Colours .Red; 'ofcourse、 – Dykam

+0

+1 - レインボークラス内に保存されている場合、短縮バージョンとして" Rainbow.Colours.Red "を使用できるようになります。 – AdaTheDev

+0

はい - 私はOPがそれをしたくないと思っていました。編集するでしょう... –

0

静的クラスから列挙型を移動することができます。列挙型は独自の権限で存在することができます。だから、これは動作します:

namespace Company.General.Project1 
{ 
    [Flags] 
    public enum Colours 
    { 
    Red, 
    Blue, 
    Orange 
    } 
} 

using Company.General.Project1; 

namespace Company.SpecialProject.Processing 
{ 
    public class MixingPallette 
    { 
    int myValue = (int)Colours.Red; 
    } 
} 

しかし、あなたは、この静的クラス内で列挙型を続ければ、それだけでそのコンテキストの中で参照することができます。

using Company.General.Project1; 

namespace Company.SpecialProject.Processing 
{ 
    public class MixingPallette 
    { 
    int myValue = (int)Rainbow.Colours.Red; 
    } 
} 
関連する問題