Использование дженериков в функциях, создающих объекты ⇐ C#
Использование дженериков в функциях, создающих объекты
У меня есть собственный класс под названием CustomList, который работает так же, как массив, но позволяет добавлять элементы и динамически увеличиваться в размере по мере необходимости.
У меня есть функция MergeSort, с которой я хочу работать с CustomList и стандартными массивами.
Я пробовал следующее:
публичный класс Sorter где T: IEnsemble { общедоступный статический IEnsemble MergeSort (массив IEnsemble) { IEnsemble рез; если (массив.Длина > 1) { IEnsemble left = MergeSort(array[0..(array.Length / 2)]); IEnsemble right = MergeSort(array[(array.Length / 2)..]); res = MergeSort (слева, справа); вернуть разрешение; } еще {возврат массива; } } public static IEnsemble MergeSort (IEnsemble слева, IEnsemble справа) { интервал leftPointer = 0; int rightPointer = 0; IEnsemble res = новый IEnsemble(left.Length + right.Length); while (leftPointer < left.Length || rightPointer < right.Length) { if (rightPointer == right.Length || (leftPointer < left.Length && left[leftPointer].CompareTo(right[rightPointer]) < 0)) { res[leftPointer + rightPointer] = left[leftPointer]; левыйУказатель++; } еще { res[leftPointer + rightPointer] = right[rightPointer]; правыйУказатель++; } } вернуть разрешение; } при таком интерфейсе:
общедоступный интерфейс IEnsemble { Т это [int я] {получить; набор; } IEnsemble this[Диапазон диапазона] { get; } int Длина {получить; } } Я обнаружил две проблемы, которые не знаю, как исправить.
[*]Я не могу заставить операцию диапазона возвращать базовый класс, поэтому мне приходится возвращать интерфейс. Я не знаю, является ли это проблемой, поскольку я не могу запустить его по следующим причинам: IEnsemble res = new IEnsemble(left.Length + right.Length); не будет работать, поскольку IEnsemble — это интерфейс.IEnsemble ли>
Вкратце: я хочу создать общую функцию для сортировки слиянием в пользовательском классе коллекции, имеющую индексацию и диапазон, которая также работает со стандартными массивами. Возможно ли это, и если да, то как это сделать?
У меня есть собственный класс под названием CustomList, который работает так же, как массив, но позволяет добавлять элементы и динамически увеличиваться в размере по мере необходимости.
У меня есть функция MergeSort, с которой я хочу работать с CustomList и стандартными массивами.
Я пробовал следующее:
публичный класс Sorter где T: IEnsemble { общедоступный статический IEnsemble MergeSort (массив IEnsemble) { IEnsemble рез; если (массив.Длина > 1) { IEnsemble left = MergeSort(array[0..(array.Length / 2)]); IEnsemble right = MergeSort(array[(array.Length / 2)..]); res = MergeSort (слева, справа); вернуть разрешение; } еще {возврат массива; } } public static IEnsemble MergeSort (IEnsemble слева, IEnsemble справа) { интервал leftPointer = 0; int rightPointer = 0; IEnsemble res = новый IEnsemble(left.Length + right.Length); while (leftPointer < left.Length || rightPointer < right.Length) { if (rightPointer == right.Length || (leftPointer < left.Length && left[leftPointer].CompareTo(right[rightPointer]) < 0)) { res[leftPointer + rightPointer] = left[leftPointer]; левыйУказатель++; } еще { res[leftPointer + rightPointer] = right[rightPointer]; правыйУказатель++; } } вернуть разрешение; } при таком интерфейсе:
общедоступный интерфейс IEnsemble { Т это [int я] {получить; набор; } IEnsemble this[Диапазон диапазона] { get; } int Длина {получить; } } Я обнаружил две проблемы, которые не знаю, как исправить.
[*]Я не могу заставить операцию диапазона возвращать базовый класс, поэтому мне приходится возвращать интерфейс. Я не знаю, является ли это проблемой, поскольку я не могу запустить его по следующим причинам: IEnsemble res = new IEnsemble(left.Length + right.Length); не будет работать, поскольку IEnsemble — это интерфейс.IEnsemble ли>
Вкратце: я хочу создать общую функцию для сортировки слиянием в пользовательском классе коллекции, имеющую индексацию и диапазон, которая также работает со стандартными массивами. Возможно ли это, и если да, то как это сделать?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Сообщения между пользователями Blazor с использованием событий, создающих ошибки
Anonymous » » в форуме C# - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-