我有一个对象模型MyObject
具有各种属性。在某一时刻,我有两个这样的实例MyObject
:实例 A 和实例 B。如果实例 B 具有非空值,我想复制实例 A 中的属性并将其替换为实例 B 的属性。
如果我只有 1 个具有 3 个属性的类,没问题,我可以轻松地对它进行硬编码(这就是我开始做的)。但实际上我有 12 个不同的对象模型,每个模型大约有 10 个属性。
有什么好的方法可以做到这一点?
Update
Use 自动映射器相反,如果您需要多次调用此方法。 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);
}
}
我将其设为通用以确保类型安全。如果你想包含私有属性,你应该使用重写类型.GetProperties(),指定绑定标志。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)