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
相关产品推荐
相关产品推荐

