2012-05-24 38 views
4

我想爲自定義類型編寫一個轉換器類 - 將一個類型(及其所有屬性)轉換爲具有匹配屬性的另一個類型。如何投一個複合自定義類型到另一個

問題出現在屬性也是自定義類型時,而非簡單類型。
自定義類型完全相同,只是它們位於同一解決方案中的不同名稱空間中。
TypeTwo對象是Webservice引用。

例如

public TypeOne ConvertToTypeTwo (TypeTwo typeTwo) 
{ 
var typeOne = new TypeOne(); 
typeOne.property1 = typeTwo.property1; //no problem on simple types 
typeOne.SubType = typeTwo.SubType; //problem! 
... 
} 

我上線得到上面的錯誤是:

錯誤166無法隱式轉換類型 'TypeTwo.SubType' 到 'TypeOne.SubType'

我試過像這樣鑄造

typeOne.SubType = (TypeOne)typeTwo.SubType; 

但得到:

錯誤167無法將類型 'TypeTwo.SubType' 到 'TypeOne.SubType'

而像這樣

typeOne.SubType = typeTwo.SubType as TypeOne; 

但得到:

錯誤168無法通過引用將類型'TypeTwo.SubType'轉換爲'TypeOne.SubType' ENCE 轉換,裝箱轉換,取消裝箱轉換,包裝 轉換,或null類型轉換

我不知道我有什麼其他選擇,或者,如果我只是在做某種根本性錯誤。 有什麼想法?

回答

5

你不能做到這一點。即使這兩種類型的正好相同的佈局(相同的字段相同類型),你不能從一個到另一個。不可能。

你需要做的是創建一個可以從一個類型轉換爲另一個類型的轉換器(作爲方法,單獨的類或轉換運算符)。

+0

謝謝。你的建議做到了訣竅。我爲子類型編寫了一個單獨的轉換器,然後調用該方法而不是嘗試不可能的轉換。再次感謝! –

5

如果這兩個子類型是不同的類型,你將不得不編寫一個單獨的轉換器來轉換這兩種類型。

例如:

public TypeOne ConvertToTypeTwo (TypeTwo typeTwo) 
{ 
    var typeOne = new TypeOne(); 
    typeOne.property1 = typeTwo.property1; //no problem on simple types 
    typeOne.SubType = ConvertToTypeTwo(typeTwo.SubType); //problem! 
} 

public TypeOneSubtype ConvertToTypeTwo(TypeTwoSubType typeTwo) 
{ 
    var subOne = new TypeOneSubType; 
    subOne.property1 = typeTwo.property1; 
    // etc. 
} 
+1

謝謝!太糟糕了,我無法將兩個答案標記爲已接受。我至少會喜歡! –

相關問題