C# 在开关和案例中分配变量
我一直在尝试给变量赋值,然后在switch/case语句之外使用相同的变量和值 它说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
语句之外的变量不是本地定义的,它想知道是否有可能使这个变量成为全局变量
以下是我目前的代码:
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可能想要抛出一些错误,而不是放弃一个无效的输入。