c# - 在交换机中使用 'goto'?

标签 c# coding-style switch-statement goto

我看过一个建议的编码标准,内容是Never use goto unless in a switch statement fall-through

我不听。这种“异常”情况到底是什么样子,可以证明 goto 是正确的?

最佳答案

此构造在 C# 中是非法的:

switch (variable) {
   case 2: 
       Console.WriteLine("variable is >= 2");
   case 1:
       Console.WriteLine("variable is >= 1");
}

在 C++ 中,如果 variable = 2,它会运行这两行。这可能是有意的,但很容易忘记第一个 case 标签末尾的 break;。出于这个原因,他们在 C# 中将其设为非法。要模仿跌倒行为,您必须明确使用 goto 来表达您的意图:

switch (variable) {
   case 2: 
       Console.WriteLine("variable is >= 2");
       goto case 1;
   case 1:
       Console.WriteLine("variable is >= 1");
       break;
}

也就是说,有a few cases goto 实际上是解决问题的好方法。 Never shut down your brain与“永远不要使用某些东西”的规则。如果它 100% 没用,那么它一开始就不会存在于语言中。不要使用 goto 是一个指南;这不是法律。

关于c# - 在交换机中使用 'goto'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4756084/

相关文章:

c# - PayPal .NET SDK - new Payment() - 抛出 NullReference 异常

c# - 将数据表转换为对象的方法

c++ - 处理结构数组 : all in one place vs splitting vs arrays within structs 的正确方法

c# - Getter、Function 还是只是在构造函数上设置它?

'where' 子句中的 SQL Switch/Case

c# - 编写连接字符串以访问远程 SQL Server 数据库

c# - 发送带有授权 header 和 token 的发布请求返回未授权

coding-style - 一个人应该练习防御性编程的程度是多少?

swift - 我有抛出错误的错误吗?我应该怎么办?

r - 开关/外壳的成语