static TResult[] ToArray <TEnumerable, TEnumerator, TSource, TResult>(this TEnumerable source, NullableSelectorAt <TSource, TResult> selector) where TEnumerable : notnull, IValueReadOnlyCollection <TSource, TEnumerator> where TEnumerator : struct, IEnumerator <TSource> { var array = new TResult[source.Count]; ValueReadOnlyCollectionExtensions.Copy <TEnumerable, TEnumerator, TSource, TResult>(source, array, selector); return(array); }
static IMemoryOwner <TResult> ToArray <TEnumerable, TEnumerator, TSource, TResult>(this TEnumerable source, NullableSelectorAt <TSource, TResult> selector, MemoryPool <TResult> pool) where TEnumerable : notnull, IValueReadOnlyCollection <TSource, TEnumerator> where TEnumerator : struct, IEnumerator <TSource> { Debug.Assert(pool is object); var result = pool.RentSliced(source.Count); ValueReadOnlyCollectionExtensions.Copy <TEnumerable, TEnumerator, TSource, TResult>(source, result.Memory.Span, selector); return(result); }
public static TSource[] ToArray <TEnumerable, TEnumerator, TSource>(this TEnumerable source) where TEnumerable : notnull, IValueReadOnlyCollection <TSource, TEnumerator> where TEnumerator : struct, IEnumerator <TSource> { #if NET5_0 var result = GC.AllocateUninitializedArray <TSource>(source.Count); #else var result = new TSource[source.Count]; #endif ValueReadOnlyCollectionExtensions.Copy <TEnumerable, TEnumerator, TSource>(source, result); return(result); }