我有兩個類型相同但名稱不同的類型。在它們之間是否有簡單或標準的方法來投射,還是我必須用反射來進行嚴肅的黑客攻擊?C中類似類型之間的鑄造#
2
A
回答
7
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。
相關問題
- 1. C#鑄造類型之間的差異
- 2. c中的類型鑄造#
- 3. OCaml類型鑄造之間的區別
- 4. 鑄造類型之間的區別
- 5. 在Java中的類型鑄造/鑄造
- 6. C#鑄造通用類型
- 7. C指針類型鑄造
- 8. 類型鑄造在c#.net
- 9. 類型鑄造在objective-c
- 10. cin類型鑄造(C++)
- 11. 鑄造類型
- 12. 類和指針的C++類型鑄造
- 13. 鑄造從類型類型
- 14. C#在不同類型的對象之間進行鑄造
- 15. C++類鑄造
- 16. 在c中鑄造泛型類型#
- 17. 類型鑄造變量中的類型
- 18. flex3類型鑄造
- 19. 類型鑄造datetime
- 20. SQL類型鑄造
- 21. Windbg類型鑄造
- 22. Python類型鑄造
- 23. Oracle類型鑄造
- 24. VB.NET - 鑄造類型
- 25. JodaTime類型鑄造
- 26. Java類型鑄造
- 27. 在繼承的分類之間鑄造
- 28. 鑄造到id之間的區別比實際類的類型,目標C
- 29. 在C++中鑄造COM類型
- 30. 在C中鑄造vs指定類型#
也許他們應該從相同的基類派生? –
已經有很多對象映射器了。例如,[bltoolkit](http://bltoolkit.net/Doc.ObjectToObject.ashx) –
如果你真的想避免反射,並有「光」對象,你可以使用[隱式](http://msdn.microsoft.com/zh-cn/ COM/EN-US /庫/ z5z9kes2%28V = VS.100%29.aspx) – kerrubin