我有一个项目集合,一个项目可以有另一个项目,另一个项目可以有另一个项目,如此类推。
我不知道有多少层的嵌套项可以有项。嵌套项的层可以在运行时定义。
class Person
{
Person person;
public Person(Person _nestedPerson)
{
person = _nestedPerson;
}
public bool IsSelectedPerson { get; set; }
public string Name { get; set; }
}
以及如何嵌套项(Person
):
IList<Person> list = new List<Person>();
for (int startIndex = 0; startIndex < 5; startIndex++)
{
list.Add(new Person(new Person(new Person(new Person(null) { Name="Bill",
IsSelectedPerson=true})) { Name = "Jessy", IsSelectedPerson = false })
{ Name = "Bond", IsSelectedPerson =true});//3 nested persons
list.Add(new Person(new Person(null) { Name = "Kendell",
IsSelectedPerson = true }) { Name="Rosy", IsSelectedPerson=true});//2 nested persons
//The next time it can be just one person without nested item(person). I do not know how many items(persons) will be nested
//list.Add(new Person(null) { Name="Rosy", IsSelectedPerson=true});
}
- 我的目标是获取所有对象(无重复项)的人员(
Person
),这些人员是IsSelectedPerson=true
?*
我玩过Select()
var ee = list.Select(x=>x.IsSelectedFacet==true);//comparison should be done here
但它不是我想要的,它只接受bool
值。
更新日期:
我期望的结果应该是有一个Person
的对象,并且具有唯一的名称。不管有多少个具有相同名称的对象。我只想取一个对象。抱歉造成误解。它应该是这样的:
5条答案
按热度按时间db2dz4w81#
您可以创建一个helper方法来展开所有嵌套对象
或者,如果
Person
类只有一个嵌套对象(Person person;
),则可以使用yield
构造来代替递归为了删除所有重复的人员,例如具有相同名称的人员,您应该实现
IEqualityComparer<Person>
,然后使用Distinct
方法。因此,最终查询应类似于:
mrwjdhj32#
下面是另一种生成项目列表的方法:
用法:
5cg8jx4n3#
我将使用某种带有递归的访问模式来访问所有嵌套的
Persons
:pvabu6sv4#
由于你不知道链中的人的级别,最好的方法是使用递归。两个简单的解决方案(假设你在Person类上添加方法)
1.创建一个接收列表的方法,这样就可以在递归调用中填充它:列表完成List =新建List();列表[0]。获取完整列表(完整列表);列表[1]。获取完整列表(完整列表);
1.相同,无参数
bz4sfanl5#
这样做是为了把人压扁,
所以你能做到,
听完你的话,你可能想要的是,