c# - 作用域如何影响 "do...while"循环,反之亦然?

标签 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");
               // 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 循环的范围。如果它不是范围问题,那是我的幸运猜测。在那种情况下,哪里出了问题,移动那行代码是如何解决问题的?

最佳答案

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

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

关于c# - 作用域如何影响 "do...while"循环,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15777029/

相关文章:

c# - 如何滚动到选择框中选定的项目

c# - DataGridTemplateColumn.HeaderTemplate 问题

c# - 将 JSON.NET JObject 的属性/标记转换为字典键

c# - 如何使用 C# 使用 Twitterizer 发推文

c - 为什么我的 printfs 给出不同的值?

python - 当 for 循环的变量有一段时间条件时,如何在 for 循环中获得步骤跳转

javascript - 为什么这会造成无限循环并使我的浏览器崩溃?

Java While循环不会循环

javascript - 全局变量在下面的 javascript 函数中未定义

使用原型(prototype)的 Javascript 类变量范围