gpt4 book ai didi

c# - 使用 goto 大小写(变量);在 C# 开关中

转载 作者:行者123 更新时间:2023-11-30 13:57:56 25 4
gpt4 key购买 nike

我正在为 Visual Studio C# 控制台中的类(class)编写文本冒险,并决定使用 switch 语句而不是 if-elses 链,因为 goto case 非常有用(到目前为止效果非常好).我知道 switch 本身中的每个 case 都必须是一个常量,但我想知道这是否也扩展到使用 goto case。例如我有:

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 input 成为变量,或者这只是 switch 语句的限制?如果是后者,我可以做一个 if-elses 链,但我认为输入一个变量更方便。非常感谢对此的任何帮助!谢谢!

最佳答案

普通 goto 的标签需要在源代码中拼写出来。它们不是被求值的表达式;它们只是标识符goto case 的标签必须是常量表达式,在编译时计算,而不是在运行时计算。

我会提醒您不要使用任何严重依赖任何形式的“goto”的解决方案。对任何一种“goto”都有一种普遍的偏见; goto 被认为是不优雅的,并且使您的代码难以遵循。可以肯定的是,这种偏见背后有一些道理,尽管 C# 经过精心设计,因此不可能或不太可能出现最严重的“goto”滥用。 (C# 只允许在同一 block 内或从内部 block 到其包含 block 之一的 goto。它永远不允许从外部 block 到内部 block ,或在没有嵌套关系的两个 block 之间。这大大降低了可能性的“意大利面条代码”。)

我假设您正在学习一门类(class),您才刚刚开始学习 C#。随着您的进步,您将了解比切换案例更优雅的控制流技术。

虽然我们批评您的代码:请考虑使用 int.TryParse 而不是 Convert.ToInt32,并确保您处理用户键入的内容是不是整数。

关于c# - 使用 goto 大小写(变量);在 C# 开关中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19299864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com