C# 无法解释为什么变量值变为-1

问题描述 投票:0回答:1

我有一些代码可以根据箭头输入在控制台上移动光标。 只要我保持在界限内,我就工作得很好,这是正常的。

在我的函数 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 并且代码抛出错误??

c# console
1个回答
0
投票

您需要通过引用传递值类型。

private static void MoveCursor(ref int x, int y)

MoveCursor(ref x, y);

或者,您可以将

x
作为 Program 类中的字段,但这不需要再使用静态方法。

© www.soinside.com 2019 - 2024. All rights reserved.