【发布时间】:2020-10-04 23:29:18
【问题描述】:
我有以下类结构(简化):
public class MyBaseType
{
public string InstanceName { get; set; }
public List<MyBaseType> MyBaseTypeList = new List<MyBaseType>();
public List<MyObject1> MyObject1List = new List<MyObject1>();
public List<MyObject2> MyObject2List = new List<MyObject2>();
// Other properties
}
public class MyObject1
{
public string SimpleName { get; set; }
public string Name { get; set; }
// Other properties
}
public class MyObject2
{
public string SimpleName { get; set; }
public string Name { get; set; }
// Other properties
}
如您所见,MyBaseType 的实例可以包含相同类型的实例列表以及MyObject1 和MyObject2 的列表。
这对我来说的一个典型用途是呈现如下所示的结构:
MyBaseType instance1
|-> InstanceName = "instance1"
|
|-> MyBaseType instance2
| |-> InstanceName = "instance2"
| |
| |-> MyObject1 object1_1
| | |-> SimpleName = "object1_1"
| |-> MyObject2 object2_1
| | |-> SimpleName = "object2_1"
|
|-> MyBaseType instance3
| |-> InstanceName = "instance3"
| |
| |-> MyObject1 object1_2
| | |-> SimpleName = "object1_2"
| |-> MyObject2 object2_2
| | |-> SimpleName = "object2_1"
|
|-> MyObject1 object1_3
| |-> SimpleName = "object1_3"
|-> MyObject2 object2_3
| |-> SimpleName = "object2_3"
显然,这种结构会变得相当复杂。
然而,我需要做的是递归地深入MyBaseType 列表,跟踪所有InstanceName 值,最后将组合字符串附加到MyObject1 或MyObject2 的SimpleName到任一对象的Name 属性。
按照上面的结构示例,名称将是:
MyObject1 object1_1 : instance1_instance2_object1_1
MyObject1 object2_1 : instance1_instance2_object2_1
MyObject1 object1_2 : instance1_instance3_object1_1
MyObject1 object2_2 : instance1_instance3_object1_2
MyObject1 object1_3 : instance1_object1_3
MyObject1 object2_3 : instance1_object2_3
我正在努力寻找一种方法来递归遍历 List<MyBaseType> 并跟踪正在构造的名称。
【问题讨论】:
-
我很抱歉,虽然你已经经历了相当大的麻烦,以使这有意义。这至少对我来说没有意义。你的最终目标是什么?为什么你需要递归地发生这种情况?总体来说是什么?
-
递归,因为由于 MyBaseType 的实例可以包含 MyBaseType 实例的列表,因此您必须通过递归到达所述列表为空的实例
-
嗯,这不需要递归发生。您可以使用
for loop迭代您的列表。此外,如果您想确保设置了基本类型的属性。如果必须,您可以通过构造函数强制其实例化。我认为您对自引用对象的属性有点困惑。就像链表中的节点类。提供的答案只是一个 for 循环,但被隐藏了。您必须阅读 linq 的全部内容。 -
很有可能你是对的。我会仔细看看。我假设递归,因为我不知道将实例添加到另一个实例的列表多少次。可能是100次
-
非常感谢!我会调查一下,希望很快有解决方案。
标签: c# .net string recursion nested