如何在不克隆的情况下自动将对象A中的所有字段分配/复制到对象B?

时间:2014-03-06 20:31:51

标签: c# reflection system.reflection data-driven

上下文:在更改描述文件时重新加载对象的非侵入式方法

enter image description here


重点:添加动态重新加载对象,对现有代码库进行最小的更改

FileSystemWatcher或类似人员调用的函数:

void OnFileChanged(string filename, ...)
{
  var old3 = GetAssetByFilename(filename);
  var new3 = LoadAsset(filename);
  ...
  Utils.CopyFields(new3, old3);
  ...
}

注意:

  • 克隆无效,因为所有对象都指向旧副本
  • 有多个类似的资产列表
  • 更改LoadAsset功能是不行的,有多个Load*功能需要更改
  • 更改Asset条款是禁止的
  • 复制必须包括私人字段等

问题:如何自动复制字段(或者有更好的方法)?

1 个答案:

答案 0 :(得分:2)

这似乎可以完成这项工作:

public static class Utils 
{
    public static void CopyFields<T>(T source, T destination)
    {
        var fields = source.GetType().GetFields();
        foreach(var field in fields)
        {
            field.SetValue(destination, field.GetValue(source));    
        }            
    }
}