Более разумный способ перегрузить методы?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Более разумный способ перегрузить методы?

Сообщение Anonymous »

У меня есть класс под названием Block, в котором есть метод Draw. Я хочу создать функцию, которая рисует группу блоков одновременно. Поскольку некоторые группы представляют собой массивы, а некоторые — списки, мне пришлось добавить перегрузку, которая по сути делает то же самое, что и базовая функция, но принимает параметр другого типа. Есть идеи, как улучшить этот код?
public static void DrawAll(Block[] arr) {
foreach(Block b in arr)
b.Draw();
}

public static void DrawAll(List arr) {
foreach(Block b in arr)
b.Draw();
}

Я пытался изучить Generics, но не могу выполнить итерацию по T, поскольку компилятор не знает, что это набор блоков.< /p>
// Doesn't work
public static void DrawAll(T arr) {
foreach(var b in arr)
b.Draw();
}

Использование ключевого слова is и приведение также не работает, потому что, насколько я понимаю, вы не можете сделать два разных приведения в тот же оператор if. Поэтому мне придется разделить приведения, и это только ухудшит внешний вид кода:
// Even dummer than just doing the overload
public static void DrawAll(T arr) {
if (arr is Block[] blocksA)
foreach(Block b in blocksA)
b.Draw();

else if (arr is List blocksL)
foreach(Block b in blocksL)
b.Draw();

else throw new Exception("not a collection of blocks");
}


Подробнее здесь: https://stackoverflow.com/questions/788 ... ad-methods
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Более разумный способ «сместить» элемент из его контейнера (с фоном)?
    Anonymous » » в форуме CSS
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Есть ли разумный способ объединить два DataFrame на основе критериев подстроки?
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Каков разумный способ показать многие тысячи позиций на геодезической карте?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Есть ли разумный способ написать внешнюю библиотеку Python с вызовами mssparkutils?
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Есть ли разумный способ написать внешнюю библиотеку Python с вызовами mssparkutils?
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»