如何将一个复合自定义类型转换为另一个

时间:2012-05-24 16:43:25

标签: c#

我正在尝试为自定义类型编写转换器类 - 将一种类型(及其所有属性)转换为另一种具有匹配属性的类型。

当属性也是自定义类型时,问题就出现了,而不是简单类型 自定义类型都是相同的,除了它们位于同一解决方案中的不同命名空间中 TypeTwo对象是Web服务引用。

例如

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”   转换,拳击转换,拆箱转换,包装   转换或空类型转换

我不确定我有什么其他选择,或者我只是做了一些根本错误的事情。 有什么想法吗?

2 个答案:

答案 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 :(得分:5)

你做不到。即使这两种类型的完全相同的布局(相同类型的相同字段),您也不能 强制转换。这是不可能的。

您需要做的是创建一个可以从一种类型转换为另一种类型的转换器(作为方法,单独的类或转换运算符)。