Joe*_*ite 21 .net linq toarray
我正在寻找一种简单的方法来克隆一个IEnumerable<T>
参数供以后参考.LINQ的ToArray
扩展方法似乎是一种很好,简洁的方法.
但是,我不清楚它是否总能保证返回一个新的数组实例.一些LINQ方法将检查可枚举的实际类型,并尽可能检查快捷方式; 例如,Count()
将查看该方法是否实现ICollection<T>
,如果是,将直接读取其Count
属性; 如果必须,它只迭代集合.
鉴于实际上存在短路的心态,似乎如果我调用ToArray()
已经是数组的东西,ToArray()
可能会短路并简单地返回相同的数组实例.这在技术上可以满足ToArray
方法的要求.
从快速测试看来,在.NET 4.0中,调用ToArray()
数组确实会返回一个新实例.我的问题是,我能依靠这个吗?我是否可以保证ToArray
始终返回一个新实例,即使在Silverlight和.NET Framework的未来版本中也是如此?在这一点上是否有明确的文件?
Cod*_*ike 16
由于ToArray方法是.NET框架的内部方法,因此我不会将自己的生命放在MS上,永远不会改变它.但是,我要做的是添加一个单元测试断言ToArray返回一个新的数组实例.
Assert.AreNotSame(myArray, myArray.ToArray());
Run Code Online (Sandbox Code Playgroud)
这样,如果您以后更改.NET框架版本,您将自动知道功能是否更改.
归档时间: |
|
查看次数: |
1665 次 |
最近记录: |