我正在用C#编写控制台程序。
我可以使用 Console.Clear() 来清除控制台屏幕上的某些内容吗?
这是我的问题:
我有一个标志(我使用Console.WriteLine() 在屏幕上显示它)和一个2D数组,我要保持恒定并清除它下面的所有内容。
我正在用C#编写控制台程序。
我可以使用 Console.Clear() 来清除控制台屏幕上的某些内容吗?
这是我的问题:
我有一个标志(我使用Console.WriteLine() 在屏幕上显示它)和一个2D数组,我要保持恒定并清除它下面的所有内容。
你可以使用自定义方法清除屏幕的部分内容...
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);
}
编辑:这里的答案显示了比我意识到的更强大的控制台操作方法。我原来写的仍然适用,如果您没有这些设施可用,或许在另一种语言中可能会有用。 这里 有答案。
将标志和数组的最初生成状态存储起来,然后在清除控制台时再次写出保存的值,而不是使用相同的生成过程。
正如其他人所说,游戏主机并非为这种操作设计的,所以你必须绕过它。
另一个选择可能是将内容写入字符串或字符串构建器,而不是直接写入控制台,然后每当控制台需要更新时,清空其输出并将你的“输出”字符串/流写入控制台。这样可以让你对输出文本执行字符串操作/正则表达式等,以删除/保留特定的内容。
然而,这将涉及大量的控制台开销,因为你将在每次更新时重新打印整个输出。
一个解决方案可能是保持一个并行的字符串 / 流表示你写到控制台上的东西,然后当你需要清除时,你可以清除字符串表示,清除控制台,然后再次将字符串写到控制台上。这样,你只需要在通常的写操作中添加一个额外的写操作,而主要的额外工作只会发生在你清空控制台时。
无论你做什么,向控制台写入数据都不是一个快速的操作,如果你正在做大量向控制台写入数据的操作,这可能会显著影响你的应用程序性能。
你不能清除并重新编写徽标和阵列吗?控制台不是设计成像你描述的那样使用的。