do-while循环如何编译?

时间:2018-07-10 04:13:12

标签: c# string loops variables do-while

问题实际上比标题要具体得多。 我刚刚经历了一些C#,却遇到了一个错误,我设法修复了这个错误,但我不知道为什么。

为什么在循环中定义了字符串强度时,do-while循环为什么会给我一个错误?

虽然我在do-whiel循环之前定义我的弦功率,但一切都很好,很花哨

        String power;

        do
        {
            Console.WriteLine("Enter values X & Y for X+Y");

            Console.WriteLine("Your value of X is  ");
            int numOne = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine(" Your value of Y is   ");
            int numTwo = Convert.ToInt32(Console.ReadLine());


            Console.WriteLine("Your Sum is {0}", numOne+numTwo);


            Console.Write("Turn calculator on or off?    ");
            power = Console.ReadLine();

        } while (power == "on" || power =="On" || power =="ON");
    }
}

}

这最终运行良好。

但是下面的示例在while语句中导致有关当前上下文中不存在的名称“ power”的错误。

     do
        {
            Console.WriteLine("Enter values X & Y for X+Y");

            Console.WriteLine("Your value of X is  ");
            int numOne = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine(" Your value of Y is   ");
            int numTwo = Convert.ToInt32(Console.ReadLine());


            Console.WriteLine("Your Sum is {0}", numOne+numTwo);


            Console.Write("Turn calculator on or off?    ");
            String power;

            power = Console.ReadLine();

        } while (power == "on" || power =="On" || power =="ON");
    }
}

1 个答案:

答案 0 :(得分:3)

{ .......... }创建一个范围。在循环内部定义比while (power...)部分更深的范围。

基本上,您可以看到嵌套深度较小的范围(if的范围可以看到方法范围,方法的范围可以看到类范围,类可以看到的名称空间范围,等等。

有关范围界定的更多信息,请参见here

另一个例子:

public void A()
{
    string power = "test";

    {
         // this works because power is defined in a less deep scope.
         Console.WriteLine(power);
    }
}

public void B()
{
    {
        string power = "test";
    }
    // this doesn't work because power is defined in a deeper scope
    Console.WriteLine(power); 
}

错误消息所指的“上下文”是:当前作用域及其上方的所有内容。