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

C#实现值不存在时才添加元素 解决Add方法重复存值问题

问题根因

你当前使用的普通集合(如List<T>)的Add()方法默认不做重复值校验,只要调用就会将元素追加到集合末尾,多次执行value.Add(subject.english);时,即使值相同也会重复存入,最终出现Count为2、两个元素均为10的现象。

实现方式

根据你的业务场景选以下任意一种方案即可:

  • 方案1:使用天然支持去重的HashSet<T>(推荐)
    HashSet<T>是专门为存储唯一值设计的集合类型,添加元素时会自动判断值是否已存在,重复值会被直接忽略,无需额外写判断逻辑:

    // 将原集合定义替换为HashSet,以存储int类型值为例
    HashSet<int> value = new HashSet<int>();
    
    // 原有Add逻辑无需修改,多次添加相同值也只会保留一份
    value.Add(subject.english);
    value.Add(subject.english);
    // 最终value.Count为1,仅存储一个10
    

    补充:HashSet<T>.Add()方法返回bool类型结果,返回true代表添加成功(值之前不存在),返回false代表值已重复、未执行添加,可按需用该返回值做后续逻辑处理。

  • 方案2:保留原有List<T>集合,添加前手动判重
    如果你因为业务需求必须使用List<T>(比如需要按索引访问元素、严格保留自定义插入顺序),可以在执行Add前先判断值是否已存在:

    // 仅当值不存在时才执行添加
    if (!value.Contains(subject.english))
    {
        value.Add(subject.english);
    }
    

    注意:如果集合存储的是自定义引用类型对象,Contains()默认按对象引用地址判断相等,若需要按对象属性值判重,需要重写对应类型的Equals()和GetHashCode()方法,或传入自定义相等比较器。

  • 方案3:批量添加完成后统一去重(不推荐常规使用)
    如果是批量导入数据后需要一次性清理重复值,可以在所有Add操作完成后调用LINQ的去重方法:

    using System.Linq;
    
    // 所有添加操作结束后执行,得到去重后的集合
    value = value.Distinct().ToList();
    

    该方案属于事后处理,相比添加环节就拦截重复值的方案性能更低,仅适合临时处理存量重复数据的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:30:46