在switch和cases中分配变量

pat*_*ick 0 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);
Run Code Online (Sandbox Code Playgroud)

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

tgr*_*s12 7

问题是play如果输入不是1或者输入,则不会定义2.如果要允许,您需要确保处理所有可能的用户输入.如果用户输入4怎么办?会发生什么?怎么样Quit

你有几个选择.您可以将您的开关/案例更改为if/else块,如果您不打算更多地扩展选项,那么这将是正常的:

if (intChoice == 1)
    play = true;
else
    play = false;
Run Code Online (Sandbox Code Playgroud)

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

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

    case 2:
        play = false;
        break;

    default:
        //Handle invalid inputs
        play = false;
        break;
}
Console.WriteLine(play);
Run Code Online (Sandbox Code Playgroud)

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

您也可以设置bool play = false;代码的最顶层,以便为每个案例初始化它.


App*_*ack 5

问题是,如果通过 switch 语句(例如情况 3:),则可能无法分配 play。要么在开始时将变量初始化为 bool play=false .. 要么向 switch 语句添加默认情况