我正在寻找一种简单的方法来克隆IEnumerable<T>
参数以供以后参考。LINQ 的ToArray
扩展方法似乎是一种很好、简洁的方法。
但是,我不清楚它是否总是保证返回一个新的数组实例。一些 LINQ 方法将检查可枚举的实际类型,如果可能,还可以使用快捷方式;例如,Count()
将查看该方法是否实现ICollection<T>
,如果是,将直接读取其Count
属性;它只在必要时迭代集合。
考虑到实际可行的短路思维,如果我调用已经是数组ToArray()
的东西,似乎可能会短路并简单地返回相同的数组实例。从技术上讲,这将满足方法的要求。ToArray()
ToArray
从快速测试中可以看出,在 .NET 4.0 中,调用ToArray()
数组确实会返回一个新实例。我的问题是,我可以依靠这个吗?即使在 Silverlight 和 .NET Framework 的未来版本中,我能否保证ToArray
始终返回一个新实例?在这一点上是否有明确的文档?