在switch和cases中分配变量

时间:2018-03-21 18:54:19

标签: c# scope

我一直在尝试为变量赋值,然后在这个switch / case语句之外使用相同的变量和值。

它表示switch语句之外的变量没有在本地定义,并且想知道是否可以使这个变量成为全局变量。

到目前为止,这是我的代码:

bool play;
string choice;
string guess;
int intChoice;
int intguess;

do
{
    Console.WriteLine("1: New game\n2:quit");
    choice = Console.ReadLine();
    intChoice = Convert.ToInt32(choice);
    switch (intChoice)
    {
        case 1:
            play = true;
            break;

        case 2:
            play = false;
            break;
    }
    Console.WriteLine(play);

(请注意,我知道我可以使用if语句,但我想知道交换机和案例是如何工作的!)

3 个答案:

答案 0 :(得分:7)

问题是,如果输入不是play1,则不会定义2。如果要允许,您需要确保处理所有可能的用户输入。如果用户输入4怎么办?会发生什么?那么Quit呢?

您有几个选择。您可以将您的开关/案例更改为if / else块,如果您没有计划大量扩展选项,那么这将是正常的:

if (intChoice == 1)
    play = true;
else
    play = false;

您还可以在交换机中添加default语句,如下所示:

switch (intChoice)
{
    case 1:
        play = true;
        break;

    case 2:
        play = false;
        break;

    default:
        //Handle invalid inputs
        play = false;
        break;
}
Console.WriteLine(play);

这使您可以选择稍后添加更多intChoice,而不会使其难以扩展。在这个简单的例子中有一些重复的代码。

您还可以在代码的最顶部设置bool play = false;,以便针对每种情况对其进行初始化。

答案 1 :(得分:4)

问题是如果它通过switch语句(例如case 3 :),则可能不会分配play。要么在开始时将变量初始化为bool play = false,要么将默认大小写添加到switch语句

答案 2 :(得分:0)

除了1和2个案例之外的另一个案例,该变量尚未正确初始化。您需要的是一个默认情况下初始化变量,以防其他任何东西通过交换机。这也是使用switch ... case的好习惯。

另一个好的做法是定义变量的初始值,这样就不会发生异常。

将变量范围从本地更改为全局(如果在这种情况下,其范围是本地范围,而不是切换范围)不会更改任何内容。由于范围仅定义了预期寿命'变量。