| File: System\Collections\Generic\CollectionExtensions.cs | Web Access |
| Project: src\winforms\src\System.Private.Windows.Core\src\System.Private.Windows.Core.csproj (System.Private.Windows.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace System.Collections.Generic; internal static class CollectionExtensions { /// <summary> /// Creates a list trimmed to the given count. /// </summary> /// <remarks> /// <para> /// This is an optimized implementation that avoids iterating over the entire list when possible. /// </para> /// </remarks> internal static List<T> CreateTrimmedList<T>(this IReadOnlyList<T> readOnlyList, int count) { ArgumentOutOfRangeException.ThrowIfLessThan(readOnlyList.Count, count, nameof(count)); // List<T> will use ICollection<T>.CopyTo if it's available, which is faster than iterating over the list. // If we just have an array this can be done easily with ArraySegment<T>. if (readOnlyList is T[] array) { return new List<T>(new ArraySegment<T>(array, 0, count)); } // Fall back to just setting the count (by removing). List<T> list = [..readOnlyList]; list.RemoveRange(count, list.Count - count); return list; } }