将类型强制转换到具有相同属性的另一个

本文关键字:属性 另一个 类型 转换 | 更新日期: 2023-09-27 18:31:39

在我的应用程序的一个部分中,我使用从 xsd 方案生成的类型 - 我有 2 个版本的架构 2008 和 2009 - 我使用的类型是 DatumType - 在每个方案中,此类型包含相同的属性 - 它们是精确的,除了命名空间。有没有办法将基准类型 (2008) 转换为基准类型 (2009),以便我可以在我的应用程序中只使用一种类型,而不是两种?

我正在使用 c# 并赢得表单,谢谢!

将类型强制转换到具有相同属性的另一个

不,没有办法将一个强制转换为另一个,因为据编译器所知,这是两种不相关的类型。

如果目标类型的字段是可分配的,则可以编写一个使用反射来复制字段的简短方法。

还可以生成将源类型的对象保存到 XML 并将该 XML 读入目标类型的对象的代码。这稍微脆弱一些,因为它依赖于相同字段的存在以及它们以相同的方式转换为 XML 的事实。

在我看来,最简单的方法是构建一个小方法来将一种类型转换为另一种类型(因为它们都共享属性),或者,如果您有权访问源代码,则实现一个接口,以便您可以将这两个类用作该接口。

换句话说,如果我们有两个类,B 和 C,它们继承接口 A(其中包含我们感兴趣的所有属性),我们可以将这两个类中的任何对象类型转换为 A。

您可以使用简单的 XSLT 预处理 XML 文件,以更正命名空间差异。

标识的第 1 部分(共 2 部分)解释了如何做到这一点。基本上,转换具有匹配元素并为每个匹配元素提供输出的模板。诀窍是有一个特定的模板来匹配基准元素并变换它们,以及一个通用变换来匹配所有类型的元素并简单地复制它们。

如果您没有使用 XSLT 的经验,请不要害怕。它比您预期的要容易学习。您可以使用像 XSLT 教程这样的教程,它可以让您理解"标识"解释。

可以使用 XslCompiledTransform 类来应用转换。

您可以使用 Visual Studio 来测试和调试 XSLT 文件。