我希望找到一种方法来获取具有相同属性的两个对象,并调用将属性值从一个对象复制到另一个对象.下面的例子假设我有一个A的实例,我想使用该实例的数据来水合一个新的实例或C(为了保持简洁,我在下面的例子中使用了字段而不是属性)
public class A : B
{
public string prop1;
public int prop2;
}
public class B
{
public byte propX;
public float propY;
}
public class C
{
public byte propX;
public float propY;
public string prop1;
public int prop2;
}
public class Merger
{
public static object Merge(object copyFrom, object copyTo)
{
//do some work
//maybe <T> generically refactor?
}
}
Run Code Online (Sandbox Code Playgroud)
合并类只是一个伪造的例子,通过泛型来做这个是最优的,但我首先要问的是这样的能力是否已经存在.我可以想象自己使用反射来做这件事,但只是想先把它扔出来以获得更好的想法.
真实世界上下文:这实际上是一个与MVVM相关的问题,因为我试图使用从EF回来的不同类来填充ViewModel实例.
查看像AutoMapper这样的工具和库- 那些可以轻松处理这样的案例 - 以及更多!无需重新发明轮子 - 只需使用该工具!:-)
您基本上可以在A和C类之间定义一个映射,如下所示:
Mapper.CreateMap<A, C>();
Run Code Online (Sandbox Code Playgroud)
然后,你可以让AutoMapper根据该映射,从A的实例到C的实例进行映射,如下所示:
C yourC = Mapper.Map<A, C>(instanceOfA);
Run Code Online (Sandbox Code Playgroud)
AutoMapper根据属性名称(和类型)执行默认映射,但您可以通过多种方式扩展和影响它,以包括从一个属性到另一个属性的映射,即使名称(或类型)不匹配100%.这是非常灵活和完善的 - 绝对值得认真看看!
| 归档时间: |
|
| 查看次数: |
3234 次 |
| 最近记录: |