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

重构含Predicate<T>的通用去重方法:如何关联内部T item?

通用List去重方法的问题解决

原MyClass去重逻辑是通过比较对象的myAttribute字段判断重复,而当前重构的RemoveDuplicatedItems方法里,传入的Predicate<T>无法关联循环中的当前item,导致没法正确实现重复判断。

解决方案

把方法的参数从Predicate<T>替换为Func<T, T, bool>——这个委托用来定义两个T类型对象是否视为重复的规则,这样就能在循环里将当前item和已存入uniqueItems的元素做比较。

修改后的完整代码:

public static List<T> RemoveDuplicatedItems<T>(List<T> items, Func<T, T, bool> isDuplicate)
{
    if (items == null)
    {
        return new List<T>();
    }
    List<T> uniqueItems = new List<T>();
    foreach (T item in items)
    {
        // 检查已有列表中是否存在和当前item重复的元素
        bool hasDuplicate = uniqueItems.Exists(existing => isDuplicate(existing, item));
        if (!hasDuplicate)
        {
            uniqueItems.Add(item);
        }
    }
    return uniqueItems;
}

调用示例(针对原MyClass场景)

// 传入判断重复的逻辑:比较两个MyClass的myAttribute是否相等
List<MyClass> uniqueMyClasses = RemoveDuplicatedItems(myObjects, (a, b) => a.myAttribute == b.myAttribute);

逻辑说明

原方法里的itm.myAttribute == item.myAttribute,本质是拿已存在的元素和当前元素做比较。换成Func<T, T, bool>后,正好可以把这两个元素作为参数传入,完全匹配原有的去重逻辑,同时保留了方法的通用性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:01:14