C# “范围”是如何纳入“范围”的;“在……的同时”;循环,反之亦然?

C# “范围”是如何纳入“范围”的;“在……的同时”;循环,反之亦然?,c#,loops,scope,C#,Loops,Scope,C#家庭作业问题:我刚刚使用do while循环添加了一些“再次播放”逻辑。这是我的原始代码: namespace demo { class Program { static void Main(string[] args) { Info myInfo = new Info(); myInfo.DisplayInfo("Daniel Wilson", "4 - Hi-Lo Game");

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 playreach=“N”到my
do
上方的一行(请参阅注释),它工作正常

我想知道我到底做了什么来解决这个问题。这似乎是一个范围问题,但在我看来,在循环中定义变量可以将其传递到循环的末尾。我浏览了我的教科书,没有任何关于范围的内容,因为它与循环有关。这对我来说意味着循环中的作用域不是一个问题,但这就像是一个作用域问题一样。我在想这件事时把自己弄糊涂了


如果这是一个范围问题,我希望更好地理解
do…的范围,同时
在方法中循环。如果这不是一个范围问题,那对我来说是一个幸运的猜测。在这种情况下,哪里出了问题?移动那行代码是如何解决的?

是的,这是范围问题。do..while的作用域如下

// outer scope
do 
{
    // inner scope
} while (/*outer scope*/);
// outer scope

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


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

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