2012-05-24 94 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

谢谢!太糟糕了,我无法将两个答案标记为已接受。我至少会喜欢! –

相关问题