我得到了程序集1和程序集2.它包含两种相同名称和相同内部结构的类型。
组装3参考1和2,并创建其中一个的对象。现在我想把它从汇编2转换到另一个。
以下是假代码:
assembly1.namespace1.typeXXX obj1 = new assembly1.type1();
assembly2.namespace2.typeXXX obj2 = obj1; <=== error here
怎么做?
谢谢!
答案 0 :(得分:3)
您可以使用AutoMapper 如果属性的名称相同,则可以这样简单:
Mapper.CreateMap<assembly1.type1, assembly2.type1>();
var obj2 = Mapper.Map<assembly1.type1, assembly2.type1>(obj1);
答案 1 :(得分:0)
这两种类型不同,因为它们位于不同的程序集中,您必须将Property复制到Property。
答案 2 :(得分:0)
你可以定义custom casting operators,但我认为在这种情况下只会增加混乱。我的问题是,为什么你定义了两个相同(但是分开)的类?为什么不直接使用其中一个?
另一种选择是在类型之间进行映射。如果您无法控制其源代码,可以使用扩展方法执行此操作:
public static class TypeOneExtensions
{
public static TypeTwo AsTypeTwo(this TypeOne typeOne)
{
return new TypeTwo
{
PropertyA = typeOne.PropertyA,
PropertyB = typeOne.PropertyB,
...
};
}
}
请注意,这会创建TypeTwo
的新实例,因此您对其所做的更改不会反映在原始TypeOne
实例中。
答案 3 :(得分:0)
我有一个肮脏的解决方案:
使用XML序列化obj1,攻击XML并将“namespace1”替换为“namespace2”。然后将XML反序列化为obj2。
答案 4 :(得分:0)
同样的问题发生在我身上。
这段代码也许可以帮到你!
using type1=assembly1.namespace1.typeXXX;
using type2=assembly2.namespace2.typeXXX;
或者,您可以阅读this