我有一些使用反向扩展方法的代码。
为了确保它不会反转原始列表,原始程序员使用 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()
那么优点是 a 的类型可以是 IEnumerable(of T) 并且它仍然可以工作。
我自己对此进行了测试,并且 b 始终是一个新对象。问题是这样的:
是否保证未来的实现将表现相同,或者这种行为是实现的意外?
一个明显的“优化”是如果它已经是一个列表,则返回对原始对象的引用,这当然意味着第二个版本将反转原始列表。