我有一个具有各种属性的对象模型 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/