c# - 如何将一种复合自定义类型转换为另一种

标签 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!
...
}

我在上面一行得到的错误是:

Error 166 Cannot implicitly convert type 'TypeTwo.SubType' to 'TypeOne.SubType'

我试过这样转换

typeOne.SubType = (TypeOne)typeTwo.SubType;

但是得到:

Error 167 Cannot convert type 'TypeTwo.SubType' to 'TypeOne.SubType'

像这样

typeOne.SubType = typeTwo.SubType as TypeOne;   

但是得到:

Error 168 Cannot convert type 'TypeTwo.SubType' to 'TypeOne.SubType' via a reference conversion, boxing conversion, unboxing conversion, wrapping conversion, or null type conversion

我不确定我还有哪些其他选择,或者我是否只是在做一些根本性的错误。 有什么想法吗?

最佳答案

如果这两个子类型是不同的类型,您将不得不编写一个单独的转换器来在这两种类型之间进行转换。

例如:

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.
}

关于c# - 如何将一种复合自定义类型转换为另一种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741794/

相关文章:

c# - 跟踪大型 XML 文件的加载进度

c# - 控制台、Windows 窗体、WPF 之间的 SynchronizationContext 有何区别?

c# - 检查 url 是否在域名后有任何内容

c# - XSLT 转换创建 StackoverflowException

来自 TextBox.Text 的 C# 正则表达式匹配?

c# - IQueryable 复杂顺序 $sort 中仅允许使用字段

c# - C# 中完整的老式 TUI 命令行应用程序

c# - PowerShell 使用 PSSession 删除项目

c# - DataGridView.Rows.RemoveAt(int index) 不会删除 Windows 窗体中的行?

javascript - ASP.NET 表单不提交