С# console, Console.Clear problem

Я пишу консольную программу на С#.

Есть ли способ, которым я могу использовать Console.Clear(), чтобы очищать определенные вещи на экране консоли?

Здесь моя проблема:

У меня есть логотип (я помещаю его на экран с помощью Console.WriteLine()) и 2d-массива, который я хочу сохранить постоянным и очистить все под ним.

Ответ 1

Вы можете использовать специальный метод для очистки частей экрана...

static void Clear(int x, int y, int width, int height)
{
    int curTop = Console.CursorTop;
    int curLeft = Console.CursorLeft;
    for (; height > 0;)
    {
        Console.SetCursorPosition(x, y + --height);
        Console.Write(new string(' ',width));
    }
    Console.SetCursorPosition(curLeft, curTop);
}

Ответ 2

Изменить: ответ здесь показывает, как вы можете манипулировать консолью намного мощнее, чем я знал. То, что я изначально написал, все еще применяется и может быть полезно, если у вас нет доступных средств, возможно, на другом языке.


Сохраните логотип и изначально сгенерированное состояние массива, а затем, когда вы очистите консоль, снова запишите сохраненные значения, вместо того, чтобы использовать одну и ту же процедуру генерации.

Как говорили другие, консоль не предназначена для такого рода операций, поэтому вам придется ее обойти.

Другим вариантом может быть запись в строку или строковый конструктор, а не в консоль напрямую, а затем всякий раз, когда консоль нуждается в обновлении, очистите ее и напишите строку вывода/потока на консоль. Это позволит вам выполнять строковые операции/регулярные выражения и т.д. В тексте вывода, чтобы удалить/оставить определенные вещи на месте.

Однако это будет связано с большим количеством накладных расходов на консоль, так как вы в конечном итоге перепечатываете весь вывод при каждом обновлении.

Решение THAT может состоять в том, чтобы сохранить параллельное представление строки/потока того, что вы пишете на консоли, а затем, когда вам нужно очистить, вы можете очистить строковое представление, очистить консоль, а затем записать строку на консоль еще раз. Таким образом, вы добавили бы только операцию дополнительной записи в свою обычную запись, а основная дополнительная работа произошла только при очистке консоли.

Независимо от того, что вы делаете, запись на консоль никогда не является быстрой операцией, и если вы выполняете много операций, когда материал записывается в консоль, это может значительно повлиять на производительность вашего приложения.

Ответ 3

Можете ли вы не очистить, а затем переписать логотип и массив? Консоль не предназначена для использования при описании.