如何在两种相同名称和内部结构之间进行转换,但是来自不同的程序集?

时间:2011-05-06 07:31:39

标签: c# .net

我得到了程序集1和程序集2.它包含两种相同名称和相同内部结构的类型。

组装3参考1和2,并创建其中一个的对象。现在我想把它从汇编2转换到另一个。

以下是假代码:

assembly1.namespace1.typeXXX obj1 = new assembly1.type1();
assembly2.namespace2.typeXXX obj2 = obj1;   <=== error here

怎么做?

谢谢!

5 个答案:

答案 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