如何将List<T>就地裁剪为自身子列表(无需创建新列表实例)
实现方案
你可以通过两次 RemoveRange 调用实现完全等效的就地操作,无需创建新的列表实例:
// myList 是 List<T> 类型对象 // 先删除偏移量 offset 之前的所有元素 myList.RemoveRange(0, offset); // 再删除需要保留的 number 个元素之外的尾部内容 myList.RemoveRange(number, myList.Count - number);
说明
- 上述实现的异常逻辑和原生
GetRange完全对齐:如果offset < 0、number < 0或是offset + number超过原列表总长度,都会抛出ArgumentOutOfRangeException - 操作全程在原列表实例上执行,不会产生新的
List<T>对象,仅会在删除元素时触发内部存储数组的元素移位,性能优于创建新列表的GetRange方案,保留的元素越多性能优势越明显。
内容的提问来源于stack exchange,提问作者Paul Masri-Stone
相关产品推荐
相关产品推荐

