2011-08-10 57 views
2

我有兩個類型相同但名稱不同的類型。在它們之間是否有簡單或標準的方法來投射,還是我必須用反射來進行嚴肅的黑客攻擊?C中類似類型之間的鑄造#

+3

也許他們應該從相同的基類派生? –

+0

已經有很多對象映射器了。例如,[bltoolkit](http://bltoolkit.net/Doc.ObjectToObject.ashx) –

+0

如果你真的想避免反射,並有「光」對象,你可以使用[隱式](http://msdn.microsoft.com/zh-cn/ COM/EN-US /庫/ z5z9kes2%28V = VS.100%29.aspx) – kerrubin

回答

7

你必須要麼從C#4

與反思黑客(我有一個 MiscUtilPropertyCopy它可以幫助) 使用動態類型

至於.NET而言,這些都是完全不同的類型。

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。