【发布时间】:2013-10-10 15:21:42
【问题描述】:
我正在为 Visual Studio C# 控制台中的一门课程编写文本冒险,并决定使用 switch 语句而不是 if-else 链,因为 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;
}
我希望能够输入一个整数变量,然后转到该整数,我有以下方法可以完成:
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
}
一切正常,但在案例 (travel2A) 下方显示“预期值为常数”的警告。是否可以通过一些调整使 goto case 输入变量,或者这只是 switch 语句的限制?如果是后者,我可以执行一系列 if-else,但在我看来,输入变量更方便。非常感谢您对此的任何帮助!谢谢!
【问题讨论】:
-
如果您在
switch中,则您只能在goto和case中使用,而您不在第二个示例中。那里没有定义标签“2”。查看msdn.microsoft.com/en-us/library/13940fs2.aspx,然后立即查看cs.utexas.edu/~EWD/transcriptions/EWD02xx/EWD215.html 并停止使用goto。 -
不能使用
goto,并不意味着不能使用switch语句来实现这个设计。请参阅我的答案以了解解决方法。 -
您提到是 C# 新手。我建议,一旦您的代码正常工作,您可以尝试将其发布到codereview.stackexchange.com 以获得建设性的批评。
标签: c# switch-statement goto