我有一个架构,我们将数据节点作为 IEnumerable<BaseNode>
传递.一切都很好,但在每个子类中,我们希望将它们存储为 List<AnotherNode>
因为该类中的所有内容都创建并使用了 AnotherNode
对象(我们有大约 15 个不同的子类)。
使用更强类型列表的一个地方不起作用是返回类型 IEnumerable<BaseNode>
的根类方法。由于 .net 3.5 中的协方差限制,无法返回。 (我们现在必须继续使用 .net 3.5。)
但是如果我有 List<AnotherNode> data;
并返回 data.OfType<BaseNode>();
- 效果很好。所以这是我的问题。
因为所有数据的类型都是 BaseNode
- 这个电话的性能影响是什么?因为替代方案是我必须在性能影响较小的地方进行转换 - 但在这种情况下,我们会放弃一切,知道它的类型。
最佳答案
两件小事:
生成枚举器中的每个项目都会产生少量但可衡量的开销。如果您因为处于非常紧密的内部循环中而需要关心这一点,那么实际上最好直接在列表上使用 for 循环进行迭代。这很可能无关紧要。
因为结果是
IEnumerable<BaseNode>
并且已经通过生成枚举函数进行了过滤,后续对 Count() 或 ElementAt() 等方法的调用将不会利用列表的 LINQ 实现中的优化。这也不太可能成为问题,除非您经常使用这些扩展方法并且拥有大量元素。
关于c# - List.OfType<> 的性能影响是什么,其中整个列表都是该类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7195478/