首页 > 后端开发 > C++ > Fallthrough 行为在 C# Switch 语句中如何工作,以及何时应使用'goto case”?

Fallthrough 行为在 C# Switch 语句中如何工作,以及何时应使用'goto case”?

Linda Hamilton
发布: 2025-01-03 06:37:40
原创
469 人浏览过

How Does Fallthrough Behavior Work in C# Switch Statements, and When Should `goto case` Be Used?

C# Switch 语句中的失败行为

在 C# 中,switch 语句允许在匹配多个情况时顺序执行代码。但是,默认情况下,switch 语句需要在每个 case 末尾有一个显式的 break 语句,以防止意外行为。

考虑以下代码示例:

string NumberToWords(int number)
{
    string[] numbers = new string[] 
        { "", "one", "two", "three", "four", "five", 
          "six", "seven", "eight", "nine" };
    string[] tens = new string[] 
        { "", "", "twenty", "thirty", "forty", "fifty", 
          "sixty", "seventy", "eighty", "ninety" };
    string[] teens = new string[]
        { "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
          "sixteen", "seventeen", "eighteen", "nineteen" };

    string ans = "";
    switch (number.ToString().Length)
    {
        case 3:
            ans += string.Format("{0} hundred and ", numbers[number / 100]);
        case 2:
            int t = (number / 10) % 10;
            if (t == 1)
            {
                ans += teens[number % 10];
                break;
            }
            else if (t > 1)
                ans += string.Format("{0}-", tens[t]);
        case 1:
            int o = number % 10;
            ans += numbers[o];

            break;
        default:
            throw new ArgumentException("number");
    }
    return ans;
}
登录后复制

此代码尝试将数字及其字符串表示形式。但是,switch 语句会引发错误,指出控制不能从情况 3 转移到情况 2,以及从情况 2 转移到默认情况。原因是在 C# 中,switch 语句需要显式中断以防止后续 case 的意外执行。

要实现失败行为,可以使用特殊的 goto case 语法。以下是示例中的实现方式:

switch (number.ToString().Length)
{
    case 3:
        ans += string.Format("{0} hundred and ", numbers[number / 100]);
        goto case 2;
    case 2:
        int t = (number / 10) % 10;
        if (t == 1)
        {
            ans += teens[number % 10];
            break;
        }
        else if (t > 1)
            ans += string.Format("{0}-", tens[t]);
        goto default;
    case 1:
        int o = number % 10;
        ans += numbers[o];

        break;
    default:
        throw new ArgumentException("number");
}
登录后复制

在此修改后的代码中,goto case 关键字允许执行跳至下一个 case,而不需要显式的 break 语句。通过在 case 3 之后添加 goto case 2,无论输入数字的长度如何,都会执行该 case 下面的代码(转换十和个)。类似地,在 case 2 之后添加 goto default 可确保始终执行 default case。

在某些情况下可能需要这种失败行为,例如在提供的示例中将数字转换为其相应的单词表示形式。然而,明智且谨慎地使用它很重要,因为粗心的失败可能会导致复杂且容易出错的代码。

以上是Fallthrough 行为在 C# Switch 语句中如何工作,以及何时应使用'goto case”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板