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

C#实现不依赖LINQ的IEnumerable<T> WhereNot扩展方法求助

问题原因

  • 返回值类型不匹配:你定义的返回值为IEnumerable<T>即原始元素类型的序列,但代码中yield return func(item)返回的是bool类型的谓词计算结果,编译阶段就会报错,无法正常运行。
  • 未实现核心逻辑:WhereNot的作用是返回不满足谓词条件的原始元素,你的代码既没有做否定判断,也没有做过滤筛选,只是输出了所有元素的谓词计算结果。
  • 额外语法问题:你提供的测试代码里存在多余的右括号,比如list.WhereNot((num) => num > 3))末尾多了一个),运行前需要删除否则会报语法错误。

正确实现代码

public static class Utility
{
    public static IEnumerable<T> WhereNot<T>(this IEnumerable<T> list, Func<T, bool> func)
    {
        // 空参数校验,避免触发空引用异常
        if (list == null)
            throw new ArgumentNullException(nameof(list));
        if (func == null)
            throw new ArgumentNullException(nameof(func));

        foreach (var item in list)
        {
            // 仅当元素不满足谓词条件时返回
            if (!func(item))
            {
                yield return item;
            }
        }
    }
}

说明

  • 实现完全没有调用任何LINQ内置扩展方法,符合你的需求。
  • 增加了空参数校验,符合C#扩展方法的开发规范,稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:06:07