如何理解Linq Where语句中t => true这一特殊条件的作用?
Where(t => true) 写法解析 基础语义
你遇到的var targetHandles = target.Where(t => true);是C# LINQ的常见写法,作用是返回一个IEnumerable<T>类型的迭代器,遍历该迭代器时会返回target集合的所有元素,无任何过滤逻辑,本质上是对ObservableCollection<T>做了一次无过滤的投影包装。
核心用途
- 类型隔离防误改:原
target是ObservableCollection<T>类型,本身支持Add、Remove等修改操作,修改时还会触发INotifyCollectionChanged通知事件。通过Where(t => true)转换为IEnumerable<T>后,返回的迭代器只支持只读遍历,无法直接修改原集合,也避免了后续逻辑误操作触发不必要的集合变更通知,效果等价于target.AsEnumerable(),但兼容性更好,部分老旧框架不支持AsEnumerable()时可以用该写法替代。 - 保留延迟执行特性:该写法返回的迭代器是延迟执行的,每次遍历
targetHandles时都会拉取target当前的最新元素。如果后续Merge逻辑中会修改target的内容,每次遍历都能拿到实时的全量数据,符合集合合并场景下的常见需求。 - 历史代码占位:部分场景下该位置最初存在过滤逻辑(比如按
DtoBase的主键、状态字段做筛选),后续业务迭代中过滤规则被移除,开发人员没有删除Where调用,直接把条件改成恒真作为占位,方便后续需要加过滤逻辑时直接修改条件即可。
额外说明
该写法性能开销极低,和直接遍历原集合几乎无差异。如果后续逻辑调用了ToList()、ToArray()等立即执行方法,就会直接生成原集合全量元素的浅拷贝副本。
内容的提问来源于stack exchange,提问作者Riccardo Zamuner
相关产品推荐
相关产品推荐

