2011-11-24 54 views
0

我在的ServiceContract有很多像這樣的方法我做:如何讓C#泛型方法

TemplateContract CreateTemplateContract(Template t) 
    { 
     return new TemplateContract() 
     { 
      Id = t.Id, 
      Name = t.Name, 
      Description = t.Description, 
      DataLayoutId = t.DataLayoutId, 
      FieldLayoutId = t.FieldLayoutId, 
      SheetId = t.SheetId, 
      ThemeId = t.ThemeId 
     }; 
    } 

    Template CreateTemplate(TemplateContract t) 
    { 
     return new Template() 
     { 
      Id = t.Id, 
      Name = t.Name, 
      Description = t.Description, 
      DataLayoutId = t.DataLayoutId, 
      FieldLayoutId = t.FieldLayoutId, 
      SheetId = t.SheetId, 
      ThemeId = t.ThemeId 
     }; 
    } 

這些方法翻譯POCO對DTO的和周圍的其他方法, 我想知道我是否可以使用其中一些通用設備,這將會更加清潔,但是我在通用編碼方面並沒有太多的經驗,並且無法安靜地計算出來。

+0

你在尋找什麼樣的可惡?如果你能給我們提供一些細節,我可能會幫助你。 –

+0

這兩種方法完全相同的代碼,他們翻譯templateContract模板和其他方式,所以我想只使用1方法爲此 –

回答

4

您可能最好看看AutoMapper其中可以自動爲你做很多這種映射

如果你真的想,除非它們共享一個基類,這是不可能的,如果他們這樣做需要您給我們通用約束基類和一個參數的構造函數使用泛型這樣你的方法簽名會像

public TemplateBase Map< TemplateBase>(TemplateBase request) where TemplateBase : new 
{ 
return new TemplateBase() 
{ 
.... 
} 
} 
1

你試過AutoMapper那個地圖很簡單嗎?

如果你不想使用這個庫,你至少可以看代碼以獲得靈感。