【发布时间】:2011-08-25 18:35:15
【问题描述】:
我有一个架构,我们将数据节点作为IEnumerable<BaseNode> 传递。这一切都很好,但在每个子类中,我们希望将它们存储为 List<AnotherNode>,因为该类中的所有内容都会创建和使用 AnotherNode 对象(我们有大约 15 个不同的子类)。
使用强类型列表不起作用的一个地方是根类方法返回类型 IEnumerable<BaseNode> 并且由于 .net 3.5 中的协方差限制,无法返回。 (我们现在必须使用 .net 3.5。)
但如果我有 List<AnotherNode> data; 并返回 data.OfType<BaseNode>(); - 那很好。所以这是我的问题。
由于所有数据都是 BaseNode 类型的 - 这个调用对性能有何影响?因为另一种选择是我必须在性能影响较小的地方进行投射——但这也是一种情况,我们知道它是类型就放弃一切。
【问题讨论】:
-
我认为需要更多代码才能说出性能受到的影响。
-
一般来说,性能成本太小了。等到你遇到真正的问题。
-
如果您处于将项目转换为另一种类型成为性能问题的水平,那么您很可能处于更改架构更为重要的情况。
-
只要记住在返回它之前调用 ToList 或 ToArray,如果这个结果使用了一个低。 OfType 返回一个 IEnumerable,它将在每次枚举每个元素时对其进行 OfType 工作。
-
@Henk Holterman - 打败我吧!
标签: c# linq generics covariance