C# 将类型转换为具有相同属性的其他类型

C# 将类型转换为具有相同属性的其他类型,c#,types,casting,xsd,C#,Types,Casting,Xsd,在我的应用程序的一个部分中,我使用从xsd scheme生成的类型-我有两个版本的Schema 2008和2009-我使用的类型是DatumType-在每个方案中,该类型包含相同的属性-它们是精确的,除了名称空间。 有没有办法将DatumType(2008)转换为DatumType(2009),这样我就可以在应用程序中只使用一种类型而不是两种类型 我正在使用c#和win表单,谢谢 不,没有办法将一个类型转换为另一个,因为就编译器所知,这是两个不相关的类型 如果目标类型的字段是可分配的,则可以编写

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


我正在使用c#和win表单,谢谢

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

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


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

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


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

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

的第1部分(共2部分)解释了如何执行此操作。基本上,转换具有匹配元素的模板,并为每个匹配的元素提供输出。诀窍是有一个特定的模板来匹配基准元素并对其进行转换,还有一个通用的转换来匹配所有类型的元素并简单地复制它们

如果您没有XSLT的经验,不要害怕。这比你想象的要容易学。你可以使用类似的教程,这样可以让你理解“身份”的解释

可以使用来应用变换


您可以使用文件。

您可以让这两种类型实现一个包含所有这些列的接口。暴露这一点,或者通过另一种类型更改一种类型的所有实例,您可以做的事情不多。是的,但这不是我需要解决这个问题的唯一实例-我有另一种类型也有同样的问题,为每种类型创建一个接口将是一项艰巨的工作是的,这样做将是一项艰巨的工作。这并没有改变你仅有的两个选择。我理解接口,但这不是我喜欢使用的方式,我在想一些linq方法,它将遍历每个属性并将其复制到第二种类型的实例中,因为我将这种类型的数据保存到xml中,只要在读取xml时更改名称空间是没有问题的——只是它们不同——一切都是一样的——但我试图避免it@MartinCh我建议使用基于XML的路由,因为它可能更容易编码。基于反射的代码很可能会快得多,但开发起来会有些复杂。