首页 > 解决方案 > 禁用自定义 IList 实现的 LINQ 优化

问题描述

如果提供的集合实现接口,则LINQ 的方法Select, Where, SelectMany(可能是其他方法,不确定)使用优化实现IList<T>- 它不使用GetEnumerator方法,而是通过索引检索元素(至少在 dotnet 核心中,以避免使用枚举器开销,我想)。

有什么方法可以禁用某些类型的优化?

我有IList实现,它代理对另一个集合的所有调用,因此使用枚举器迭代所有元素实际上比通过索引获取所有元素要快得多。

标签: .netlinq

解决方案


当然可以。专门为您的类型实现给定的方法。您可以提供类型特定的实现作为扩展方法或实例方法,编译器将选择它们,因为它们更具体(自然,扩展方法需要在范围内才能被考虑)。

可以找到针对 LINQ 方法的类型特定优化的示例System.Collections.Immutable.ImmutableArray<T>


推荐阅读