You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.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");
}

说明

  1. Find方法用来定位目标支付项,注意匹配名称要和原始数据一致,原代码里的"CreditCard"是错误的,应改为"CC"
  2. RemoveAll方法可以一次性删除所有符合条件的元素,比遍历删除更高效
  3. 必须加空值判断,防止找不到目标项或者Categories列表为null时抛出异常

内容的提问来源于stack exchange,提问作者Nishanth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:32:38