Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net在null时递归合并两个相同的对象、所有属性_C#_.net_Object_Merge - Fatal编程技术网

C# .Net在null时递归合并两个相同的对象、所有属性

C# .Net在null时递归合并两个相同的对象、所有属性,c#,.net,object,merge,C#,.net,Object,Merge,我有一个任务,其中提供了一个基本对象,其中包含来自我们的数据服务的对象和原语,并将其与客户机提供的相同对象上提供的数据相耦合。它需要最终成为一个完整的对象。我将对象称为“MyObject” 以下是数据服务中对象的外观: MyObject.FirstName = null MyObject.LastName = null MyObject.DataProperty1 = anotherobject anotherobject.property1 = somevalue1 another

我有一个任务,其中提供了一个基本对象,其中包含来自我们的数据服务的对象和原语,并将其与客户机提供的相同对象上提供的数据相耦合。它需要最终成为一个完整的对象。我将对象称为“MyObject”

以下是数据服务中对象的外观:

MyObject.FirstName = null
MyObject.LastName = null
MyObject.DataProperty1 = anotherobject
   anotherobject.property1 = somevalue1
   anotherobject.property2 = somevalue2
   anotherobject.property2 = somevalue2
MyObject.DataProperty2 = yetanotherobject
   yetanotherobject.property1 = someothervalue1
   yetanotherobject.property2 = someothervalue2
   yetanotherobject.property3 = someothervalue3
   yetanotherobject.property4 = someothervalue4
下面是由客户端提供的对象的外观

MyObject.FirstName = John
MyObject.LastName = Doe
MyObject.DataProperty1 = anotherobject
   anotherobject.property1 = null
   anotherobject.property2 = null
   anotherobject.property2 = null
MyObject.DataProperty2 = yetanotherobject
   yetanotherobject.property1 = null
   yetanotherobject.property2 = null
   yetanotherobject.property3 = null
   yetanotherobject.property4 = null
我不能期望确切地知道哪些子项对象将为null,但我知道递归地,我需要最终合并的对象包含来自两个原始对象的实际数据,而不是null。显然,这些对象将比我上面键入的要复杂得多,但要点是我的问题是有效的

我试过做一些事情,比如我不能理解非原语

我真的不认为这是AutoMapper的任务,因为MyObject的类型对于客户端和数据端都是相同的类。把它映射到自身是没有意义的

可惜我不能就这样走了 MyObject1+MyObject2=新组合对象哈哈


此外,这是遗留代码,我意识到它根本不是“最佳实践”。但是仍然需要解决这个问题。

我可以看到,您将遇到两个潜在的显示阻止问题:嵌套对象引用和引用其父对象的子对象。两者都可能导致无限递归场景和内存不足错误

您可以通过简单地决定不合并任何深度超过(比如)x层的嵌套来缓解嵌套问题。这并不理想,但它可以防止该场景的无限递归

儿童指代父母的问题更为复杂。您必须能够将合并的对象映射到其原始对象,然后在输出中将引用节点映射回已合并的节点。这不是胆小鬼的任务

这是AutoMapper无法为您完成的任务吗?如果是的话,我的直觉告诉我,它会比你重新发明它更好地为你做到这一点,并且大大降低了出错的风险