diff --git a/src/System.Private.CoreLib/shared/System/Collections/ObjectModel/Collection.cs b/src/System.Private.CoreLib/shared/System/Collections/ObjectModel/Collection.cs index 40c8ed8dbabd..5d6c9c97573a 100644 --- a/src/System.Private.CoreLib/shared/System/Collections/ObjectModel/Collection.cs +++ b/src/System.Private.CoreLib/shared/System/Collections/ObjectModel/Collection.cs @@ -116,7 +116,25 @@ public void Insert(int index, T item) InsertItem(index, item); } - public void InsertRange(int index, IEnumerable collection) => InsertItemsRange(index, collection); + public void InsertRange(int index, IEnumerable collection) + { + if (items.IsReadOnly) + { + ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); + } + + if (collection == null) + { + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.list); + } + + if ((uint)index > (uint)items.Count) + { + ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_ListInsert); + } + + InsertItemsRange(index, collection); + } public bool Remove(T item) { @@ -131,9 +149,60 @@ public bool Remove(T item) return true; } - public void RemoveRange(int index, int count) => RemoveItemsRange(index, count); + public void RemoveRange(int index, int count) + { + if (items.IsReadOnly) + { + ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); + } + + if ((uint)index > (uint)items.Count) + { + ThrowHelper.ThrowArgumentOutOfRange_IndexException(); + } + + if (count < 0) + { + ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum); + } + + if (index > items.Count - count) + { + ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen); + } + + RemoveItemsRange(index, count); + } + + public void ReplaceRange(int index, int count, IEnumerable collection) + { + if (items.IsReadOnly) + { + ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); + } - public void ReplaceRange(int index, int count, IEnumerable collection) => ReplaceItemsRange(index, count, collection); + if ((uint)index > (uint)items.Count) + { + ThrowHelper.ThrowArgumentOutOfRange_IndexException(); + } + + if (count < 0) + { + ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum); + } + + if (index > items.Count - count) + { + ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen); + } + + if (collection == null) + { + ThrowHelper.ThrowArgumentNullException(ExceptionArgument.list); + } + + ReplaceItemsRange(index, count, collection); + } public void RemoveAt(int index) { @@ -172,21 +241,6 @@ protected virtual void SetItem(int index, T item) protected virtual void InsertItemsRange(int index, IEnumerable collection) { - if (items.IsReadOnly) - { - ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); - } - - if (collection == null) - { - ThrowHelper.ThrowArgumentNullException(ExceptionArgument.list); - } - - if ((uint)index > (uint)items.Count) - { - ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_ListInsert); - } - if (GetType() == typeof(Collection) && items is List list) { list.InsertRange(index, collection); @@ -202,26 +256,6 @@ protected virtual void InsertItemsRange(int index, IEnumerable collection) protected virtual void RemoveItemsRange(int index, int count) { - if (items.IsReadOnly) - { - ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); - } - - if ((uint)index > (uint)items.Count) - { - ThrowHelper.ThrowArgumentOutOfRange_IndexException(); - } - - if (count < 0) - { - ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum); - } - - if (index > items.Count - count) - { - ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidOffLen); - } - if (GetType() == typeof(Collection) && items is List list) { list.RemoveRange(index, count);