2015-09-08 72 views
0

我有兩個類映射兩類在c#

public class foo1 
{ 
    public int id; 
    public string image_link; 
    public string sale_price; 
} 

public class foo2 
{ 
public int Id; 
public string ImageLink; 
public string SalePrice 
} 

的特性值僅通過下劃線和例不同。我需要映射這兩個類。

現在我想是這樣,其工作的內容:

//var b = object of foo2 
var a = new foo1{ 
a.id = b.Id, 
a.image_link = b.ImageLink, 
a.sale_price = b.SalePrice 
} 

聽說AutoMapper的,但我din't有我是多麼想用那個或者是可以選擇的明確的想法忽略其中的案例或下劃線。或者有沒有更好的解決方案呢?

+2

你可以讀AutoMapper教程或閱讀文檔,這是相當簡單的和更復雜的例子,文檔甚至還展示如何完成更高級的配置。 – Ric

+3

你現在的方法到底是什麼問題?它有效,不是嗎?然而,另一種方法是在任何類中創建某種轉換方法或定義用戶轉換。 – HimBromBeere

+0

你用ASP.NET做這些嗎?那很簡單。 –

回答

2

您的代碼很好,並按預期工作。

我會親自勸你不是使用automapper。有很多的解釋有關爲什麼在互聯網上,這裏是例如一個:http://www.uglybugger.org/software/post/friends_dont_let_friends_use_automapper

基本上主要的問題是,你的代碼將默默地在運行時失敗,如果你不修改您的foo2對象重命名foo1對象的某些屬性。

+2

呀_「不要用AutoMapper,很容易得到錯誤」 _是有點延伸。無論如何,使用單向或雙向測試都需要進行單元測試來測試映射,就像使用手動方式一樣,它很容易忘記屬性或發生複製粘貼錯誤。 – CodeCaster

+0

@CodeCaster公平點,但我會說這是個人喜好。我個人總是更喜歡(如果可能的話)我的代碼根本不編譯,如果某些重構出錯了,而不是期望某些單元測試失敗(這並不妨礙編寫單元測試,但我更喜歡編譯在調用之前失敗他們)。 – ken2k

+0

如果您忘記映射您現在重命名的屬性,它仍然會編譯。:) – CodeCaster

1

作爲@ ken2k的回答,我建議你不要使用對象映射器。

如果您想保存代碼,您可以爲映射創建一個新方法(或直接在構造函數中)。

public class foo1 
{ 
    public int id; 
    public string image_link; 
    public string sale_price; 

    public void map(foo2 obj) 
    { 
    this.id = obj.Id; 
    this.image_link = obj.ImageLink; 
    this.sale_price = obj.SalePrice; 
    } 
} 

然後

//var b = object of foo2 
var a = new foo1(); 
a.map(b);