1

異なる名前空間に2つのクラスがあり、castと入力する必要があります。

あるクラスのキャストオブジェクトを別のクラスに入力する方法。どちらのクラスも同じメソッドとプロパティを持っています。

リフレクションは機能しますか?クラスの型キャストの例はどれでも役に立ちます。

4

4 に答える 4

2

あるタイプから別のタイプに直接キャストすることはできません。次のことができます。

  1. 手動マッピング
  2. リフレクションを使用して自動的にマップします(プロパティ名は同じであるため)
  3. AutoMapperを使用する
于 2012-12-03T09:31:36.160 に答える
1

たとえば、一方が他方のベースであるなど、何らかの方法で関連していない限り、それらをキャストすることはできません。

マッパーを使用するなど、さまざまな方法でマップを作成できます。AutoMapperはよく知られています。

https://github.com/AutoMapper/AutoMapper

このウィルは、クラスメンバー名に基づいて一方から他方にマップされます

于 2012-12-03T09:31:36.460 に答える
0

それらのクラスにはいくつのプロパティがありますか?それらは「手書き」のクラスですか?

たぶん、2つのクラスは必要なく、そのうちの1つを削除して、他のクラスをどこでも使用できますか?

たぶん、クラスの1つが他から派生する可能性がありますか?次に、基本クラスに共通のプロパティとメソッドを記述するだけで済みます。

2つの異なるクラスが必要で、どちらも他方から派生していない場合(これは、「通常の」キャスト(参照変換キャスト)が許可されるために1つのmsutが持つ状況です)、いくつかのオプションがあります。

  1. 他のクラスのインスタンスをパラメーターとして受け取るクラスの1つに対して、コンストラクターのオーバーロードを記述します。または
  2. あるクラスのインスタンスを別のタイプの新しいオブジェクトに「変換」する静的メソッドを作成する、または
  3. public static explicit operator ClassOne(ClassTwo ct)あなたは「翻訳」をしたを書くことができます。これにより、標準のキャスト構文(たとえば(ClassOne)variable)を使用できるようになります。
  4. 他の人が示唆しているように、マッピングツールを使用するか、それらの間の変換に「似ている」プロパティを見つける独自のリフレクションコードを作成することができます。
于 2012-12-03T09:49:59.690 に答える
0

クラスがまったく関連していない場合の別の解決策(パーツフォームマッピング)は、を使用できます。これが危険すぎる場合のイベントですが、考えられるオプションの1つと見なすことができます。dynamic

namepsace A {
    public class NotRelatedA() {
       public void Run() {}
    }
}

namepsace B {
    public class NotRelatedB() {
       public void Run() {}
    }
}


dynamic dyn = new A.NotRelatedA();
dyn.Run(); //Run A

dyn = new B.NotRelatedB();
dyn.Run(); //Run B, without changing and mapping anything

繰り返しますが、これは一種の危険です。安全な静的タイプの世界を離れ、動的で強力な混乱に飛び込むため、使用する場合は注意して使用してください。

于 2012-12-03T09:32:06.750 に答える