【问题标题】:Copy properties from object A to B when that property is NULL [duplicate]当该属性为 NULL 时,将属性从对象 A 复制到 B [重复]
【发布时间】:2025-08-08 11:30:02
【问题描述】:

我有两个都是 Shoppingcart 类型的对象。 一个叫 shoppingcartA,另一个叫 shoppingcartDefault。

shoppingcartA 设置了一些属性,但有些为 NULL。 我想用 shoppingcartDefault 具有的值替换 shoppingcartA 的每个 NULL 属性。

问题是我不知道这些属性的名称(或者我知道,但有 100 个属性,我不想全部手动输入)。

我查看了一个循环遍历 shopingcartA 拥有的每个属性的 foreach,但找不到一种方法从 shoppingcartDefault 中获取相同的属性并将其粘贴到那里。

【问题讨论】:

  • 你试过反射吗:例如:typeof(ShoppingChart).GetProperties(...)?
  • @Stefan 我有。设法让它工作(尽管对于 int 显然它们需要为空,因为它们默认为 0)。如果您将其添加为答案,我可以接受。
  • 您可以通过反射来做到这一点,但您可能不应该这样做。如果对象有这么多属性,您无法手动复制它们,那么它可能是一个糟糕的设计,您应该重构。听起来您的购物车应该是一个集合,而不是具有数百个属性的对象。

标签: c# object


【解决方案1】:

你可以这样映射

foreach (var propertyInfo in test2.GetType().GetProperties())
        {
            if (propertyInfo.GetValue(test2) == null)
            {
                propertyInfo.SetValue(test2, propertyInfo.GetValue(test1));
            }

        }

【讨论】: