我有一个具有各种属性的对象模型 MyObject 。在某一时刻,我有这些 MyObject 的两个实例:实例 A 和实例 B。如果实例 B 具有非空值,我想将实例 A 中的属性复制并替换为实例 B 的属性。

如果我只有 1 个具有 3 个属性的类,没问题,我可以轻松地对其进行硬编码(这就是我开始做的)。但我实际上有 12 个不同的对象模型,每个模型大约有 10 个属性。

有什么好方法可以做到这一点?

最佳答案

更新
如果您需要大量调用此方法,请改用 AutoMapper。 Automapper 使用 Reflection.Emit 构建动态方法,并且比反射快得多。

您可以使用反射复制属性的值:

public void CopyValues<T>(T target, T source)
{
    Type t = typeof(T);

    var properties = t.GetProperties().Where(prop => prop.CanRead && prop.CanWrite);

    foreach (var prop in properties)
    {
        var value = prop.GetValue(source, null);
        if (value != null)
             prop.SetValue(target, value, null);
    }
}

我已将其设为通用以确保类型安全。如果你想包含私有(private)属性,你应该使用 Type.GetProperties() 的覆盖,指定绑定(bind)标志。

关于c# - C#合并两个对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8702603/

10-13 23:47