diff --git a/src/System.Collections.Immutable/src/System/Collections/Immutable/ImmutableArray`1+Builder.cs b/src/System.Collections.Immutable/src/System/Collections/Immutable/ImmutableArray`1+Builder.cs index 692ddc288075..9241da33cbfb 100644 --- a/src/System.Collections.Immutable/src/System/Collections/Immutable/ImmutableArray`1+Builder.cs +++ b/src/System.Collections.Immutable/src/System/Collections/Immutable/ImmutableArray`1+Builder.cs @@ -624,7 +624,21 @@ public int LastIndexOf(T item, int startIndex, int count, IEqualityComparer e /// public void Reverse() { - Array.Reverse(_elements, 0, _count); + // The non-generic Array.Reverse is not used because it does not perform + // well for non-primitive value types. + // If/when a generic Array.Reverse becomes available, the below code + // can be deleted and replaced with a call to Array.Reverse. + int i = 0; + int j = _count - 1; + T[] array = _elements; + while (i < j) + { + T temp = array[i]; + array[i] = array[j]; + array[j] = temp; + i++; + j--; + } } ///