5

2 つの異なるオブジェクトに 2 つの列挙型があります。enumオブジェクト #1 をオブジェクト #2 と等しく設定したいと考えていenumます。

ここに私のオブジェクトがあります:

namespace MVC1 {

    public enum MyEnum {
        firstName,
        lastName
      }

   public class Obj1{
        public MyEnum enum1;
    }
   }


     namespace MVC2 {

    public enum MyEnum {
        firstName,
        lastName
      }

    public class Obj2{
        public MyEnum enum1;
      }
    }

私はこれをしたいのですが、これはコンパイルされません:

 MVC1.Obj1 obj1 = new MVC1.Obj1();
 MVC2.Obj2 obj2 = new MVC2.Obj2();
 obj1.enum1 = obj2.enum1; //I know this won't work.

Obj1 の列挙型を Obj2 の列挙型と同じに設定するにはどうすればよいですか? ありがとう

4

3 に答える 3

7

それらを同じに保つと仮定すると、int との間でキャストできます。

obj1.enum1 = (MVC1.MyEnum)((int)obj2.enum1);
于 2012-06-05T14:47:59.290 に答える
7

列挙型には基になる整数型があり、デフォルトでは int (System.Int32) ですが、「enum MyEnum : type」を使用して明示的に指定することもできます。

2 つの異なる名前空間で作業しているため、Enum 型は本質的に異なりますが、基になる型が同じであるため、それらをキャストすることができます。

obj1.enum1 = (MVC1.MyEnum) obj2.enum1;

注: C# では、パラメーターがない場合でも、関数呼び出しにかっこを使用する必要があります。それらをコンストラクター呼び出しに追加する必要があります。

于 2012-06-05T14:49:47.947 に答える
2

それを行う最善の方法は、 Enum.IsDefinedを使用して範囲内にあるかどうかを確認することです:

int one = (int)obj2.enum1;
if (Enum.IsDefined(typeof(MVC1.MyEnum), one )) { 
  obj1.enum1 = (MVC1.MyEnum)one;
}

 obj1.enum1 = (MVC1.MyEnum) Enum.Parse(typeof(MVC1.MyEnum),
                                 ((int)obj2.enum1).ToString());

また

int one = (int)obj2.enum1;  
obj1.enum1 = (MVC1.MyEnum)one; 
于 2012-06-05T14:48:52.293 に答える