.net - 禁用自定义 IList 实现的 LINQ 优化
问题描述
如果提供的集合实现接口,则LINQ 的方法Select
, Where
, SelectMany
(可能是其他方法,不确定)使用优化实现IList<T>
- 它不使用GetEnumerator
方法,而是通过索引检索元素(至少在 dotnet 核心中,以避免使用枚举器开销,我想)。
有什么方法可以禁用某些类型的优化?
我有IList
实现,它代理对另一个集合的所有调用,因此使用枚举器迭代所有元素实际上比通过索引获取所有元素要快得多。
解决方案
当然可以。专门为您的类型实现给定的方法。您可以提供类型特定的实现作为扩展方法或实例方法,编译器将选择它们,因为它们更具体(自然,扩展方法需要在范围内才能被考虑)。
可以找到针对 LINQ 方法的类型特定优化的示例System.Collections.Immutable.ImmutableArray<T>
。
推荐阅读
- python - 使用 Python/Selenium 从 Angular 网站中选择复选框
- javascript - 将鼠标悬停在隐藏的工具提示上后 D3.js 工具提示重新出现?
- google-apps-script - 如何处理多个 onEdit() 函数?
- r - 在组类别末尾的新列中添加具有组总和的行
- java - 如何否定多个谓词
- arrays - 如何获取数组的基本范围?
- pug - 如何让 Jade(pug) 包含的文件访问变量?
- python - MatplotlibDeprecationWarning:使用与先前轴相同的参数添加轴当前重用早期实例
- asp.net-core - 如何使用 Xunit 在 Visual Studio 代码中调试非测试项目
- sql-update - 用字符更新 sql 问题