C# “范围”是如何纳入“范围”的;“在……的同时”;循环,反之亦然?
C#家庭作业问题:我刚刚使用do while循环添加了一些“再次播放”逻辑。这是我的原始代码: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");
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”代码>到mydo
上方的一行(请参阅注释),它工作正常
我想知道我到底做了什么来解决这个问题。这似乎是一个范围问题,但在我看来,在循环中定义变量可以将其传递到循环的末尾。我浏览了我的教科书,没有任何关于范围的内容,因为它与循环有关。这对我来说意味着循环中的作用域不是一个问题,但这就像是一个作用域问题一样。我在想这件事时把自己弄糊涂了
如果这是一个范围问题,我希望更好地理解do…的范围,同时在方法中循环。如果这不是一个范围问题,那对我来说是一个幸运的猜测。在这种情况下,哪里出了问题?移动那行代码是如何解决的?是的,这是范围问题。do..while的作用域如下
// outer scope
do
{
// inner scope
} while (/*outer scope*/);
// outer scope
你是对的,这是一个范围问题。C#具有块作用域,这意味着在块(在{}
之间声明的代码)内声明的变量只能在该块(和子块)内访问
由于playreach
是在循环体内部定义的,因此在该块外部,甚至在while
表达式中,都无法访问它。添加。。循环的每次迭代都会破坏在该块中定义的变量,因此当您处于块外的条件评估中时,您不知道在内部上下文中定义的playreach