我有一些使用反向扩展方法的代码。.NET ToList是否保证始终返回一个新对象?
为了确保它不会颠倒原始列表,原始程序员使用GetRange创建了一个新列表。
dim a = New List(of Thing)
... fill in a
dim b = a.GetRange(0, a.count)
b.reverse()
推测GetRange保证始终创建一个新的对象。这是否也适用于ToList?
然后,我可以写:
dim a = New List(of Thing)
... fill in a
dim b = a.ToList()
b.reverse()
的优点则是一个类型可以是IEnumerable的(的T),它仍然能工作。
我自己测试过这一点,它一直是真实的,b是一个新的对象。问题是这样的:
是否保证未来的实现会表现相同或者这种行为是否是实现中的事故?
一个明显的'优化'将返回对原始对象的引用,如果它已经是一个列表,这当然意味着第二个版本会颠倒原始列表。
相关:[?ToList() - 它创建一个新的列表]( http://stackoverflow.com/q/2774099/1149773) – Douglas