2

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

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


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

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

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

有什么建议么?

谢谢K

4

3 回答 3

4

你可能想看看AutoMapper

于 2012-07-14T12:51:22.920 回答
2

使用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;
于 2012-07-14T13:02:28.170 回答
0

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

于 2012-07-14T12:54:45.427 回答