如何在.NET Core中使用C#删除嵌套列表中的项
C# 从嵌套列表中删除指定项
原始数据
你的原始列表(JSON格式)如下:
[ { "Name": "CC", "Categories": [ { "description": "Visaa", "payCode": "v" }, { "description": "Master", "payCode": "m" } ] }, { "Name": "paypal", "Categories": [ { "description": "paypal", "payCode": "p" } ] } ]
需求
需要从Name为"CC"的项的Categories列表中删除以下元素:
{ "description": "Master", "payCode": "m" }
删除后预期结果:
[ { "Name": "CC", "Categories": [ { "description": "Visaa", "payCode": "v" } ] }, { "Name": "paypal", "Categories": [ { "description": "paypal", "payCode": "p" } ] } ]
你尝试的代码
payments.Find(x => x.Name == "CreditCard").PaymentOptions;
解决方案
首先需要定义对应的数据实体类,用来序列化或操作这些数据:
public class PaymentMethod { public string Name { get; set; } public List<Category> Categories { get; set; } } public class Category { public string description { get; set; } public string payCode { get; set; } }
然后执行删除逻辑:
// 定位到Name为"CC"的支付方式(注意你原代码里写的"CreditCard"和目标名称不匹配,要改成"CC") var ccPayment = payments.Find(p => p.Name == "CC"); // 空值判断,避免NullReferenceException if (ccPayment != null && ccPayment.Categories != null) { // 删除符合条件的Category元素 ccPayment.Categories.RemoveAll(c => c.description == "Master" && c.payCode == "m"); }
说明
Find方法用来定位目标支付项,注意匹配名称要和原始数据一致,原代码里的"CreditCard"是错误的,应改为"CC"RemoveAll方法可以一次性删除所有符合条件的元素,比遍历删除更高效- 必须加空值判断,防止找不到目标项或者
Categories列表为null时抛出异常
内容的提问来源于stack exchange,提问作者Nishanth
相关产品推荐
相关产品推荐

