2011-08-10 4 views
2

同じメンバを持ちますが名前が異なる2つの型があります。彼らの間にキャストするための簡単な、あるいは標準的な方法がありますか?あるいは、私は反射で深刻なハッキングをしなければなりませんか?C#で同様の型の間でキャストする

+3

おそらく同じ基本クラスから派生する必要がありますか? –

+0

すでにマッパーに反対するオブジェクトはたくさんあります。例えば、[bltoolkit](http://bltoolkit.net/Doc.ObjectToObject.ashx) –

+0

本当にreflexionを避け、 "light"オブジェクトを持っているなら、[implicit](http://msdn.microsoft。 com/ja-jp/library/z5z9kes2%28v = VS.100%29.aspx) – kerrubin

答えて

7

あなたは限り.NETは懸念しているとして、これらは完全にあるC#4

からの反射(私は助けることができるMiscUtilPropertyCopyクラスを持っている)または使用して動的型付けをハッキングんするか持っています別々のタイプ。

9

両方のタイプを表すinterfaceを作成できます。どちらのタイプにも対応できるコードで作業する場合は、各タイプにインターフェイスを実装してから、特定のタイプの代わりにインターフェイスを使用します。

1

これは、はるかに完璧からですが、私は、共通のインターフェイスに基づいてオブジェクト間で同じ名前のプロパティをコピーするために、この拡張メソッドを使用し

public static T CopyTo<T>(this T source, T target) where T : class 
{ 
    foreach (var propertyInfo in typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public)) 
    { 
     propertyInfo.SetValue(target, propertyInfo.GetValue(source, null), null); 
    } 

    return target; 
} 

使い方が

var internationalCustomer = new InternationalCustomer(); 
var customer = (Customer)internationalCustomer.CopyTo<ICustomer>(new Customer()); 

InternationalCustomerのようなものですお客様は両方ともICustomerを実装する必要があります。

関連する問題