将包含属性的两个对象合并到一个对象中

时间:2009-09-21 14:29:04

标签: c# .net

如果我有两个对象foobar,请使用对象初始化程序语法延迟...

object foo = new { one = "1", two = "2" };

object bar = new { three = "3", four = "4" };

是否可以将这些组合成一个对象,看起来像这样......

object foo = new { one = "1", two = "2", three = "3", four = "4" };

3 个答案:

答案 0 :(得分:7)

不,你不能这样做。你在编译时有两种不同的类型,但是在执行时需要第三种类型,以包含属性的并集。

我的意思是,可以创建一个包含相关新类型的新程序集...但是无论如何你都无法从代码“正常”引用它。

答案 1 :(得分:3)

正如其他人所说,做你所描述的事情并不方便,但如果你只是想对综合属性进行一些处理:

Dictionary<string, object> GetCombinedProperties(object o1, object o2) {
    var combinedProperties = new Dictionary<string, object>();
    foreach (var propertyInfo in o1.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
        combinedProperties.Add(propertyInfo.Name, propertyInfo.GetValue(o1, null));
    foreach (var propertyInfo in o2.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
        combinedProperties.Add(propertyInfo.Name, propertyInfo.GetValue(o2, null));
    return combinedProperties;
}

答案 2 :(得分:1)

假设没有命名冲突,可以使用反射来读取对象的属性并将其合并为单个类型,但是如果不对其进行反射,则无法直接在代码中访问此类型好。

在4.0中,通过dynamic关键字的介绍,可以更容易地在代码中引用动态类型。请记住,这并不是一个更好的解决方案。