在C#中的对象之间转换

时间:2012-07-14 12:45:36

标签: c# object transformation

我有一个似乎是一个简单的问题,但我无法提出一个干净的解决方案。 我有两个类,如下所示

Class Person{
    String name{get; set;}
    int age{get; set;}
}


Class Alien{
    String alienName{ get; set}
    int alienAge{get; set;}
}

这些类是我必须使用的第三方类,无法控制。但在某些时候,我希望能够在给定Person对象的情况下构造Alien对象,反之亦然。我的例子中只有两个属性。在现实生活中,我可能拥有多达50个外星人和人物。

外星人不是人的一个子集,人不是外星人的子集。这些只是两个不同的对象。你们认为什么是在彼此之间转换这些对象的最佳方式。我不想费力地编写一个复制方法来接受每个属性并在另一个属性中设置它的等效属性。由于方法名称在这两个类之间可能有很大的不同,我认为我也不能使用反射。理想情况下,我正在寻找可以使复制过程外化的东西,这样如果将来Alien或Person对象发生变化,我就不必改变逻辑。

有什么建议吗?

由于 ķ

3 个答案:

答案 0 :(得分:4)

您可能需要查看AutoMapper

答案 1 :(得分:1)

使用Interfaces。如果您有Interface,则必须复制您必须复制的某些属性:

Interface ISubject
{
    // properties
    String name {get; set;}
    int age {get; set;}
}

Class Person : ISubject
{
    // contractors
    public Person ()
    {
        ...
    }

    public Person (ISubject subject)
    {
         name = subject.name;
         age = subject.age;
    }
    ...
}

Class Alien : ISubject
{
    // contractors
    public Alien ()
    {
        ...
    }

    public Alien (ISubject subject)
    {
         name = subject.name;
         age = subject.age;
    }
    ... 
}

当你使用时:

var person = new Person();
...
ISubject subject = (ISubject) person;
var name = subject.name;

var person = new Person();
...
Alien subject = new Alien(person);
var name = alien.name;

答案 2 :(得分:0)

您可以尝试http://code.google.com/p/nutil/,有一个名为BeanUtils的类,它有一个复制属性的方法。