|
|
1
8
如果你不介意他们分组而不是 合并 :
|
|
|
2
3
未测试,但使用reflection.emit API时,应该可以这样做:
用途:
|
|
|
3
2
不幸的是,这不是你能轻易做到的。最好的方法是创建一个匿名类型作为LINQ查询的一部分,但是这样做会 地方的 仅限于范围,因此仅适用于您所采用的方法。 当.NET 4出现时,会有一个新的动态运行库来帮助您。 |
|
4
1
除了“为什么”这个问题,我唯一能想到的方法是将两个对象(一个已知对象和一个未知对象)合并成一个新类型,那就是使用reflection.emit在运行时生成一个新类型。 在msdn上有一些例子。您必须确定是否要合并具有相同名称或已知类型取代未知类型的字段。 据我所知,在林肯没有办法做到这一点。 因为你只对属性感兴趣,所以应该很容易使用 this article 作为一个例子。去掉创建方法的IL,你就可以走了。 |
|
|
5
0
正如其他人所指出的,没有办法“合并”它们(如果你正在考虑
但是,您希望通过“合并”它们来完成什么呢?显式声明属性对编写代码和编译时安全性的影响最大,但如果不能指定类型,则没有机会这样做。如果您只是在寻找一个通用的“属性包”容器,那么一个现有的数据结构,例如
|
|
6
0
如果可以向元数据类添加方法,可以执行以下操作
我不确定我是否会推荐这种确切的方法,我主要是把它留在这里,以显示匿名类型作为可能的选项,这可能值得研究。 |
|
7
0
另一种选择: 像这样修改第一个类
取第二个类并将其序列化为xmlElement,如下所示:
将属性any设置为xmlElement,并将其序列化 您将看到嵌入在文档中的其他类的XML,以及所有名称空间。 如果类是使用xsd.exe生成的,并且将以下元素用作元素,则甚至可以避开此问题:
我相信您还可以为多个子类使用一个XML元素数组。 反序列化应该是检查XML元素,然后查找匹配的类,或者使用命名空间查找类。 这比乱搞字符串操作要整洁得多。 |