c# - c#在嵌套的对象列表中插入项目
问题描述
我有这样的课:
public class Abc
{
public int Id { get; set; }
public List<Abc> Child{ get; set; }
}
我有一个像这样的Abc嵌套列表,其中包含两个父项及其子项:
Abc (Id = 1)
|
|-- Abc (Id = 2)
|-- Abc (Id = 3)
|
|-- Abc (Id = 4)
|
|-- Abc (Id =5)
Abc (Id = 6)
|
|-- Abc (Id = 7)
|-- Abc (Id = 8)
|
|-- Abc (Id = 9)
|
|-- (Id = 10)
==== 更新 ====
话虽如此,我有两个输入参数:
- 编号 = 4
- Abc 类的对象 (Id = 9)
- Abc 类的对象 (Id = 11)
我需要在整个列表中找出 id 为 4 的对象,并且仅当列表中不存在该对象时才将该对象插入其子项中。
所以 id = 9 已经存在,所以我不能插入。但我可以插入 Id = 11 的对象。
=== UPDATE 2 ====
所以在添加 id = 11 之后,列表应该是这样的。
Abc (Id = 1)
|
|-- Abc (Id = 2)
|-- Abc (Id = 3)
|
|-- Abc (Id = 4)
|
|-- Abc (Id =5)
|-- Abc (Id = 11) -- ADDED
Abc (Id = 6)
|
|-- Abc (Id = 7)
|-- Abc (Id = 8)
|
|-- Abc (Id = 9)
|
|-- (Id = 10)
我不知道如何实现这一点。有人可以帮忙吗?它可以是 c# lambda 或 linq 或任何其他方法。
解决方案
当然,您可以检查 Child 属性不为 null 的位置。
public class Abc
{
public Abc(int id)
{
Id = id;
}
public int Id { get; }
public List<Abc> Child { get; set; }
public Abc FindById(int id)
{
if (Id == id) return this;
if (Child == null) return null;
foreach (var childItem in Child)
{
var result = childItem.FindById(id);
if (result != null) return result;
}
return null;
}
public bool HasChild(int id)
{
return FindById(id) != null;
}
public Abc AddChildIfNotExist(Abc child)
{
if (child == null) return this;
if (!HasChild(child.Id))Child.Add(child);
return this;
}
}
static void Main(string[] args)
{
var a = new Abc(1)
{
Child = new List<Abc>
{
new Abc(2),
new Abc(3)
{
Child = new List<Abc>
{
new Abc(7)
{
Child = new List<Abc>
{
new Abc(5)
}
}
}
},
new Abc(6)
{
Child = new List<Abc>
{
new Abc(8)
{
Child = new List<Abc>
{
new Abc(9),
new Abc(4)
{
Child = new List<Abc>()
}
}
}
}
}
}
};
a
.FindById(4)
.AddChildIfNotExist(new Abc(10))
.AddChildIfNotExist(new Abc(4));
}
推荐阅读
- drop-down-menu - Api Management Developer Portal 中不提供下拉菜单
- amazon-web-services - 为 aws-cdk 管道的跨账户执行角色添加权限
- sql - 获取具有重叠日期的唯一天数(在 SAS 中)
- regex - 正则表达式从具有多项选择的主机获取端口
- asp.net - ASP.NET 表单身份验证超时最大值
- api - 在公共 GitHub 的 Chrome 扩展中隐藏 API 客户端 ID 和密码
- c++ - 使用掩码 RCNN 从运动结构中重建对象
- systemd - Systemd 服务停止后进入失败状态
- spring-boot - 具有两个服务器的 Spring Boot Monolith 负载平衡
- c# - LDAP 连接响应服务器不可用