我需要仅从一个对象中复制尚未填充到另一个相同类型对象中的填充值。
例如,我们传递了一个对象,它只是用数据进行了部分实例化,我们读取数据库以获得对象的完全实例化版本 - 但是这可能还没有由应用程序提交到数据库的更改 - 因此我们需要移动从数据库版本到对象的传入版本中的任何值——不覆盖传入对象中可能已经存在的任何值(因为这些是最新的值)。
Adam Robinson 在另一篇文章中建议的以下代码(见下文非常有用 - 谢谢!)是一个很好的起点。但是我需要扩展它——因为我只想复制目标对象上尚未填充的值(即需要检查 destProperty 是否为空)。然而,作为一个额外的复杂因素,在传入的对象中声明了内部复杂类型,此代码复制高级子组而不进入子组的各个属性(即我可以尝试使用 Root cdt 声明的任何变量)检查是否为空,但子 cdts 中的所有字段都被简单地复制而不通过各个字段)。
任何帮助将不胜感激。
public static void CopyPropertyValues(object source, object destination)
{
var destProperties = destination.GetType().GetProperties();
foreach (var sourceProperty in source.GetType().GetProperties())
{
foreach (var destProperty in destProperties)
{
if (destProperty.Name == sourceProperty.Name &&
destProperty.PropertyType.IsAssignableFrom(sourceProperty.PropertyType))
{
destProperty.SetValue(destination, sourceProperty.GetValue(
source, new object[] { }), new object[] { });
break;
}
}
}
}