5

C# 作业问题:我刚刚使用 do-while 循环添加了一些“再次播放”逻辑。这是我的原始代码:

namespace demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Info myInfo = new Info();
            myInfo.DisplayInfo("Daniel Wilson", "4 - Hi-Lo Game");
               // I moved  String playAgain = "N"; to here 
            do
            {
                DWHiLowUI theUI = new DWHiLowUI();
                theUI.Play();
                String playAgain = "N";
                Console.WriteLine("Enter 'Y' to play again, any other key to exit.");
                playAgain = Console.ReadLine();
            }
            while ((playAgain == "Y")||(playAgain =="y"));
            Console.ReadLine();
        }
    }
}

这给了我一个错误:

Error   7   The name 'playAgain' does not exist in the current context

我搬到String playAgain = "N";了我的上方do(见评论),它工作得很好。

我试图了解我究竟了什么来解决这个问题。这似乎是一个范围问题,但在我看来,在循环中定义一个变量可以想象将它传递到循环的末尾。我浏览了我的教科书,没有任何关于范围的内容,因为它与循环有关。这将向我表明循环内的范围不是问题,但这表现得好像它是一个范围问题。我正在困惑自己思考它。

如果这一个范围问题,我希望更好地了解do...while方法中循环的范围。如果这不是范围问题,那是我的幸运猜测。在那种情况下,出了什么问题,移动那行代码是如何解决的?

4

3 回答 3

8

你是对的,这是一个范围界定问题。C# 具有块作用域,这意味着在块内声明的变量(在 之间声明的代码{})只能在该块(和子块)内访问。

由于playAgain是在循环体内部定义的,因此在该块之外无法访问它,甚至在while表达式内也无法访问。

于 2013-04-03T00:53:55.943 回答
6

是的,这是范围问题。do..while 周围的范围如下所示

// outer scope
do 
{
    // inner scope
} while (/*outer scope*/);
// outer scope
于 2013-04-03T00:52:47.187 回答
2

添加..循环的每次迭代都会破坏该块中定义的变量,因此当您处于块外的条件评估中时,不知道playAgain内部上下文中定义的是什么。

于 2013-04-03T00:59:57.550 回答