C#在运行时将两个对象合并在一起

Jon*_*Jon 21 c#

我有一种情况,我从Excel加载一个非常不规范的记录集.我拉入每一行并一次创建一个对象.每行可以包含公司和/或客户.

我的问题是多行可能有相同的对象,所以我可能已经创建了它.我做了一个比较,看看它是否已经在列表中.如果是这样,我需要合并这两个对象,以确保我没有从第二行获得任何新信息.

所以:

company   - client   - address   - phone
----------------------------------------
mycompany -          - myaddress - 
mycompnay - myclient -           - myphone
Run Code Online (Sandbox Code Playgroud)

所以第一行会创建一个地址为"myaddress"的公司对象.第二行将创建另一个公司对象(根据我的规则是与公司名称相同的公司),这也有客户参考和电话号码.

所以我知道它们是相同的,但需要确保所有数据合并到一个对象中.

目前我正在创建一个实用程序类,它接受两个对象(一个是主要的,另一个是合并的,所以如果存在冲突,则一个具有优先级),它会遍历每个变量并分配值(如果有的话) .这是一个沉重的锅炉板,我希望可能有一些实用工具,我可以用来为我做手工工作.

这个例子已经简化,因为有一些其他变量,一些基本类型和其他更复杂的项目.

Mar*_*ett 37

反思会起作用.就像是:

public static void MergeWith<T>(this T primary, T secondary) {
    foreach (var pi in typeof(T).GetProperties()) {
       var priValue = pi.GetGetMethod().Invoke(primary, null);
       var secValue = pi.GetGetMethod().Invoke(secondary, null);
       if (priValue == null || (pi.PropertyType.IsValueType && priValue.Equals(Activator.CreateInstance(pi.PropertyType)))) {
          pi.GetSetMethod().Invoke(primary, new object[]{secValue});
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 通用而优雅.但不知何故,它让我的脊椎发抖. (8认同)