gpt4 book ai didi

c# - 如何通过匹配字段或属性名称从不同的类复制数据

转载 作者:行者123 更新时间:2023-11-30 13:51:55 33 4
gpt4 key购买 nike

我正在寻找一种方法来获取两个具有相同属性的对象,并进行调用以将属性值从一个对象复制到另一个对象。下面的示例假设我有一个 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?
}
}

合并类只是一个伪示例,通过泛型执行此操作将是最佳选择,但我首先要质疑的是这种功能是否已经存在。我可以想象自己使用反射来执行此操作,但只是想先将其抛出以获得更好的想法。

真实世界上下文:这实际上是一个 MVVM 相关问题,因为我正在尝试使用从 EF 返回的不同类来填充 ViewModel 实例。

最佳答案

查看工具和库,例如 AutoMapper - 那些会轻松处理这样的情况 - 以及更多!无需重新发明轮子 - 只需使用工具! :-)

您基本上可以像这样定义 A 类和 C 类之间的映射:

Mapper.CreateMap<A, C>();

然后,您可以让 AutoMapper 根据该映射执行从 A 实例到 C 实例的映射,如下所示:

C yourC = Mapper.Map<A, C>(instanceOfA);

AutoMapper 根据属性名称(和类型)进行默认映射,但您可以通过多种方式扩展和影响它以包含从一个属性到另一个属性的映射,即使名称(或类型)不匹配100%。它非常灵活且成熟 - 绝对值得认真研究!

关于c# - 如何通过匹配字段或属性名称从不同的类复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3696464/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com