2011-08-11 11 views
5

2つの非常によく似たC#オブジェクトがあります。あるクラスから別のクラスに値をコピーしています。C#あるオブジェクトから別のオブジェクトへ列挙をコピーする

各クラスには、列挙型を公開するいくつかのプロパティがあります。列挙体の内部は同じであるが、名前は異なる。

public enum EnumA 
{ 
A, 
B 
} 

public EnumA EnumAProperty 
{ 
get{ return enumA;} 
} 

public enum EnumB 
{ 
A, 
B 
} 

public EnumB EnumBProperty 
{ 
get{ return enumB;} 
} 

EnumBPropertyから返された値をEnumAPropertyに割り当てたいのですが可能ですか?

+0

そして、はい、私はセットを必要と知って値を割り当てることができますので、あなたはアイテムのオフセットの整数を定義することができます! – AJM

+0

hmmm列挙型がそのように互換性があるかどうかわからない... –

+0

列挙型メンバに値を割り当て、EnumAの値を得てその値をEnumBに割り当てない限り、それは働くだろうか? –

答えて

4

あなたは鋳造経由で行うことができますが、それが壊れているように私はそれをお勧めしません - 列挙メンバーのいずれかが並べ替えられたり、新しいアイテムが結果を追加した場合ではない可能性がありますされていない場合、あなたはそれを再解析する必要がありますあなたが期待しているものになります。

enum Color { Red = 0, Yellow = 1, Blue = 2 }; 
enum Shape (Square = 0, Triangle = 1 }; 

Color color = Color.Red; 
Shape shape = (Shape) color; 

shapeは値で終わる可能性:下記の形よりも多くの色がある -

さらに悪いことに、鋳造と
EnumAProperty = (EnumA) EnumBProperty; 

はあなたが先には同等でソースの列挙型の項目を持っている場合でありますこの値は定義されていませんが、2です。

EnumAProperty = ConvertToA(EnumBProperty); 

... 

private static EnumA ConvertToA(EnumBProperty b) 
{ 
    switch (b) 
    { 
     case EnumB.Flannel: return EnumA.HandTowel; 
     case EnemB.Vest: return EnumA.UnderShirt; 
     ... 
     default: throw new ArgumentOutOfRangeException("b"); 
    } 
} 
+1

重要な、しかしよく見落とされている点については、enumに定義されていない値を割り当てることができます。 –

4

enumメンバーには、対応する整数値があります。
デフォルトでは、これらの値は昇順に割り当てられ、0で始まります。 (したがって、その数値)列挙内の項目の順序が同じであれば

、あなただけの同じ値でEnumBメンバーを取得するためにEnumBに数値をキャストすることができます。

EnumBProperty = (EnumB)(int)EnumAProperty; 

EnumBProperty = (EnumB)Enum.Parse(typeof(EnumB), EnumAProperty.ToString()); 
0

あなたは整数にキャストまたは文字列に変換し、それにEnum.Parseを行うことができ、次のいずれか

代わりに、私はあなたがマップするためにswitchステートメントを使用することをお勧めしたいです。

0

は、以下のことを試してみてください。

EnumAProperty = (EnumA)Enum.Parse(typeof(EnumA), EnumBProperty.ToString); 
1

限り、異なるタイプの両方の列挙のようあなたがそれを直接割り当てるcan'not。 あなたは整数値

public enum EnumA 
{ 
A = 0, 
B = 1 
} 

public enum EnumB 
{ 
A = 0, 
B = 1 
} 

EnumBPropertry = (int)EnumAProperty 
+0

誰かが列挙型の定義を変更するまで、それ以外の列挙型は変更しない限り、問題ありません。 –

0
EnumBProperty = (EnumB)Enum.Parse(typeof(EnumB), EnumAProperty.ToString()); 
関連する問題