2014-07-09 21 views
1

我想隱藏另一個類型(Test2)的一個類型(Test1)中的數據。我可以使用Test1類中的方法來完成它,如下所示。是這種類型轉換的最佳方式

public class Test1 
{ 
    public int x { get; set;} 
    public int y { get; set;} 
    public int y { get; set;} 

    pubic Test2 ConvertToTest2() 
     { 
      // ............ 
     }  
} 

public class Test2 
{ 
    public float Alpha { get; set;} 
    public float Beta { get; set;} 
} 


Test1 test1 = new Test1() { x=1, y=2, z=3}; 
Test2 test2 = test1.ConvertToTest2(); 

我知道還有其他機制(IConvert,Convert,TypeConverter等)。我想知道我在做什麼是最好的方法?如果還有其他方法更適合這一點,你能建議如何做到這一點?

+0

你在做什麼?該方案以何種方式不令人滿意? – Servy

+0

類可以有其他複雜類型,我只是舉個簡單的例子。點是什麼將是最好的類型轉換機制,因爲好像有幾個選項。 –

+2

爲什麼投下來? –

回答

1

你的方法非常好。我將這個方法稱爲ToTest2,因爲這似乎是.net庫建立的約定(比較,例如,與ToStringToListToArrayToArray,...)。

+0

感謝您的及時響應和建議。 –

1

儘管您的方法很好,但我發現擴展方法非常適合類型轉換。他們允許保持類型彼此不知道,並保持專注於他們的業務職責。目前您的Test1課程不符合單一責任原則。有兩個原因需要更改 - 如果是數據或邏輯更改,或者轉換爲Test2更改(例如屬性已重命名,已刪除或某些轉換規則已更改)。

所以,這裏是如何擴展方法可以看看:

public static Test2 ToTest2(this Test1 source) 
{ 
    return new Test2 { 
     // ... 
    }; 
} 

用法將保持不變:

var test1 = new Test1() { x=1, y=2, z=3 }; 
var test2 = test1.ToTest2(); 

你也應該思考一些繪圖工具的使用,像AutoMapper。它會自動映射具有相同名稱的屬性,並允許您指定自定義映射規則。映射將如下所示:

var test2 = Mapper.Map<Test2>(test1); 
相關問題