如果我有两个对象foo
和bar
,请使用对象初始化程序语法延迟...
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" };
答案 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
关键字的介绍,可以更容易地在代码中引用动态类型。请记住,这并不是一个更好的解决方案。