我有一些代码可以根据箭头输入在控制台上移动光标。 只要我保持在界限内,我就工作得很好,这是正常的。
在我的函数 MoveCursor 上,我想实现一个 checkBound 函数,如果 例如:X < 0 : X -> Console.bufferWidth -1.
static void Main(string[] args)
{
Console.CursorVisible = false;
ConsoleColor old = Console.BackgroundColor;
int x = 0;
int y = 0;
do
{
ConsoleKey key = Console.ReadKey().Key;
Console.SetCursorPosition(x, y);
Console.BackgroundColor = old;
Console.Write(' ');
switch (key)
{
case ConsoleKey.RightArrow:
x += 1;
MoveCursor(x, y);
break;
case ConsoleKey.LeftArrow:
x -= 1;
MoveCursor(x, y);
break;
case ConsoleKey.UpArrow:
y -= 1;
MoveCursor(x, y);
break;
case ConsoleKey.DownArrow:
y += 1;
MoveCursor(x, y);
break;
case ConsoleKey.Escape:
return;
}
} while (true);
}
private static void MoveCursor(int x, int y)
{
if (x < 0)
{
x = Console.BufferWidth - 1;
}
Console.SetCursorPosition(x, y);
Console.BackgroundColor = ConsoleColor.Red;
Console.Write(' ');
}
有人可以解释一下为什么在 MoveCursor 被调用并且光标正确设置为 Console.bufferWidth 之后,X 变量变成 -1 并且代码抛出错误??
您需要通过引用传递值类型。
private static void MoveCursor(ref int x, int y)
MoveCursor(ref x, y);
或者,您可以将
x
作为 Program 类中的字段,但这不需要再使用静态方法。