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

C#实现删除JSON文件中指定Passive成员的问题排查

问题根源

List<T>.Contains() 默认对引用类型使用引用相等判断对象是否存在。你从JSON反序列化得到的members数组对象,和搜索到的DokkanUserPassiveBuilder实例是不同内存对象——哪怕PassiveName完全一致,引用地址不同就会导致Contains返回false,无法触发删除。

解决方案

以下两种方法可直接解决问题,按需选择:

方法1:重写对象的相等判断逻辑

给DokkanUserPassiveBuilder类重写Equals和GetHashCode方法,让判断逻辑基于PassiveName(支持大小写不敏感匹配,可按需调整):

public class DokkanUserPassiveBuilder
{
    public string PassiveName { get; set; }
    // 你的其他属性...

    public override bool Equals(object obj)
    {
        if (obj is not DokkanUserPassiveBuilder otherPassive)
            return false;
        
        // 基于PassiveName判断相等,OrdinalIgnoreCase支持大小写不敏感
        return string.Equals(PassiveName, otherPassive.PassiveName, StringComparison.OrdinalIgnoreCase);
    }

    public override int GetHashCode()
    {
        // 对应Equals逻辑,哈希码基于PassiveName生成
        return PassiveName?.GetHashCode(StringComparison.OrdinalIgnoreCase) ?? 0;
    }
}

重写后,members.Contains(classObj)就能正确识别属性匹配的对象,执行删除操作。

方法2:直接通过属性匹配删除(更简洁)

无需修改类结构,直接用属性匹配删除:

批量删除(支持匹配多个相同PassiveName的条目)

// 用户传入的要删除的被动名称
string targetPassive = "TEQ Jiren";

// 删除所有PassiveName匹配的条目
int removedCount = members.RemoveAll(p => 
    string.Equals(p.PassiveName, targetPassive, StringComparison.OrdinalIgnoreCase));

if (removedCount > 0)
{
    // 将修改后的数组重新序列化并写入JSON文件
    SaveUpdatedJson(members);
    // 告知用户删除成功(如Discord回复)
}
else
{
    // 告知用户未找到匹配的被动技能
}

单个目标删除(适合PassiveName唯一的场景)

var passiveToDelete = members.FirstOrDefault(p => 
    string.Equals(p.PassiveName, targetPassive, StringComparison.OrdinalIgnoreCase));

if (passiveToDelete != null)
{
    members.Remove(passiveToDelete);
    SaveUpdatedJson(members);
}
else
{
    // 未找到匹配项
}
关键注意点
  • 推荐使用StringComparison.OrdinalIgnoreCase做大小写不敏感匹配,避免用户输入大小写不一致导致匹配失败;若需精确匹配,替换为StringComparison.Ordinal即可。
  • 删除操作完成后,必须将修改后的members数组重新序列化并写入JSON文件,否则修改不会持久化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:20:30