You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历C#对象属性并更新另一对象的对应属性

解决方案

首先明确:因为两个对象是同类型的,通过GetType().GetProperties()获取的属性集合在两个对象上完全匹配,不需要额外对比属性名称或类型,直接用同一个PropertyInfo实例就能操作目标对象的对应属性。

修正你代码里的变量名错误(property应为prop),完整实现代码如下:

foreach (PropertyInfo prop in object1.GetType().GetProperties())
{ 
    var val = prop.GetValue(object1);
    if (val != null)
    {
        // 直接用当前prop设置object2的对应属性
        prop.SetValue(object2, val);
    }
}

补充说明

  • 这段代码自动处理同类型对象的属性匹配,因为GetProperties()返回的属性顺序和定义一致,且同类型的属性元数据完全相同,所以prop.SetValue(object2, val)就是直接操作目标对象的对应属性,无需额外判断。
  • 如果需要排除某些属性(比如只读属性、特定名称的属性),可以在遍历前加过滤条件,比如:
var props = object1.GetType().GetProperties()
    .Where(p => p.CanWrite); // 只处理可写属性
foreach (var prop in props)
{
    // 逻辑同上
}

更简洁的方式(用库简化)

如果你不想自己写反射逻辑,可以用AutoMapper这类对象映射库,只需要配置一次规则就能自动完成非空属性的赋值:

// 初始化配置(全局一次即可)
var config = new MapperConfiguration(cfg => 
{
    cfg.CreateMap<YourObjectType, YourObjectType>()
       .ForAllMembers(opt => opt.Condition((src, dest, srcVal) => srcVal != null));
});

IMapper mapper = config.CreateMapper();
// 执行赋值
mapper.Map(object1, object2);

内容的提问来源于stack exchange,提问作者Cef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:30:16