public static T[] MergeSortBy<T, TKey>(this T[] array, Func<T, TKey> keySelector) { TKey[] keys = new TKey[array.Length]; MyDynamicArray<object> map = SortHelper.CreateMap(array, keys, keySelector); return SortHelper.OrderByMapToArray(array, map, keys.MergeSort()); }