using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; namespace UnityEngine.Rendering { /// /// A set of extension methods for collections /// public static class RemoveRangeExtensions { /// /// Tries to remove a range of elements from the list in the given range. /// /// The list to remove the range /// The zero-based starting index of the range of elements to remove /// The number of elements to remove. /// The exception raised by the implementation /// The value type stored on the list /// True if succeed, false otherwise [CollectionAccess(CollectionAccessType.ModifyExistingContent)] [MustUseReturnValue] public static bool TryRemoveElementsInRange([DisallowNull] this IList list, int index, int count, [NotNullWhen(false)] out Exception error) { try { if (list is List genericList) { genericList.RemoveRange(index, count); } else { #if DEVELOPMENT_BUILD || UNITY_EDITOR if (index < 0) throw new ArgumentOutOfRangeException(nameof(index)); if (count < 0) throw new ArgumentOutOfRangeException(nameof(count)); if (list.Count - index < count) throw new ArgumentException("index and count do not denote a valid range of elements in the list"); #endif for (var i = count; i > 0; --i) list.RemoveAt(index); } } catch (Exception e) { error = e; return false; } error = null; return true; } } }