Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在开关和案例中分配变量_C#_Scope - Fatal编程技术网

C# 在开关和案例中分配变量

C# 在开关和案例中分配变量,c#,scope,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();

我一直在尝试给变量赋值,然后在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语句,但我想知道开关和案例是如何工作的!)

问题是,如果通过switch语句(例如案例3:)播放,则可能无法分配播放。在开始时将变量初始化为bool play=false。。或者在switch语句中添加一个默认的case

问题是,如果它通过switch语句,则可能无法分配播放(例如case 3:)。在开始时将变量初始化为bool play=false。。或者在switch语句中添加一个默认大小写

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

你有几个选择。您可以将开关/机箱更改为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
s,而不会使其难以扩展。在这个简单的例子中有一些重复的代码


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

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

你有几个选择。您可以将开关/机箱更改为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
s,而不会使其难以扩展。在这个简单的例子中有一些重复的代码


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

如果在1和2种情况之外的另一种情况下使用该变量,则该变量未正确初始化。您需要的是一个默认情况,以便在任何其他情况下通过开关初始化变量。这也是使用开关盒的良好实践

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


将变量范围从局部更改为全局(如果在这种情况下,它的范围是局部的,而不是开关的范围)不会更改任何内容。由于作用域仅定义变量的“预期寿命”。

如果变量是1和2以外的另一种情况,则变量未正确初始化。您需要的是一个默认情况,以便在任何其他情况下通过开关初始化变量。这也是使用开关盒的良好实践

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


将变量范围从局部更改为全局(如果在这种情况下,它的范围是局部的,而不是开关的范围)不会更改任何内容。由于作用域仅定义变量的“预期寿命”。

“表示switch语句之外的变量未在本地定义”--编译器是否难以说出哪个变量未在本地定义?对此,我不会使用switch或if语句。如果您想学习switch,我建议您做一些超过两种状态的事情。@EdPlunkett好久没见到您了,欢迎回来@谢谢你。最重要的是,我一直在工作。@maccettura我的观点是OP需要关注的不仅仅是这两种状态,因为它们不是唯一两种可能的状态。OP需要决定对所有可能的状态(而不仅仅是其中两个)执行什么操作。“表示switch语句外部的变量不是本地定义的”--编译器是否很难说出哪个变量不是本地定义的?我不会为此使用switch或if语句。如果您想学习switch,我建议您做一些超过两种状态的事情。@EdPlunkett好久没见到您了,欢迎回来@谢谢你。最重要的是,我一直在工作。@maccettura我的观点是OP需要关注的不仅仅是这两种状态,因为它们不是唯一两种可能的状态。OP需要决定对所有可能的状态执行什么操作,而不仅仅是其中两个。您可以从“案例2”中删除“break”,也可以从“default”中删除“play=false”。或者最好完全删除“案例2”,但这完全取决于OP计划如何处理应用程序的其余部分。这假设OP可能希望抛出一些错误,而不是在无效输入上退出。您可以从“案例2”中删除“break”,也可以从“default”中删除“play=false”。或者最好完全删除“案例2”,但这完全取决于OP计划如何处理应用程序的其余部分。这需要假设OP可能想要抛出一些错误,而不是放弃一个无效的输入。