Rus*_*lke 3 c# goto switch-statement
我正在为Visual Studio C#控制台中的课程编写文本冒险,并决定使用switch语句而不是if-elses链,因为goto情况有多么有用(到目前为止它已经非常有效).我知道交换机本身的每个案例都必须是一个常量,但我想知道这是否也扩展到使用goto情况.例如,我有:
switch (location)
{
case 1:
break;
case 2:
break;
case 3:
break;
//I have 10 cases, each representing a location such as "Orc Cave", I just cut it down for brevity
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够输入一个整数变量,然后转到该整数,我有以下内容来完成:
string travel2 = Console.ReadLine();//inputs a integer representing each location
int travel2A = Convert.ToInt32(travel2);
if (1<=travel2A && travel2A<=10)
{
goto case(travel2A);
}
else{
goto case(2);//current location
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但有一个"预期值不变"的警告(travel2A).是否可以通过一些调整使goto case输入变量,或者只是switch语句的限制?如果是后者,我可以做一个if-elses链,但在我看来,输入变量更方便.非常感谢任何帮助!谢谢!
普通标签goto需要在源代码中拼写出来.它们不是被评估的表达式 ; 它们只是标识符.标签goto case必须是常量表达式,在编译时评估,而不是在运行时评估.
我会提醒你不要任何严重依赖任何形式的"转到"的解决方案.对任何一种"goto"都有一种流行的偏见; 相信它们不够优雅,使你的代码难以理解.虽然C#经过精心设计,但最糟糕的"goto"滥用是不可能或不太可能的,但这种偏见确实存在一些真相.(C#只允许在同一个块内或从内部块到其中一个包含块的getos.它永远不允许从外部块转到内部块,或者在两个没有嵌套关系的块之间.这大大降低了可能性"意大利面条代码".)
我假设你正在上一门课程,你才开始学习C#.随着您的进步,您将学习比开启案例更优雅的控制流技术.
虽然我们批评你的代码:考虑使用int.TryParse而不是Convert.ToInt32,并确保你处理用户键入非整数的情况.