如何将两个case语句合并为一个switch语句

7
switch(code)
{
    case 'A':
    case 'a':
         // to do 
    default:
         // to do 
}

有没有什么方法可以将两个“case”语句合并在一起?

3
C#和C++是不同的编程语言。你是在询问哪一个? - Ant P
2
switch(code.ToUpper())怎么样,然后每个case都使用大写? - Prix
嗨,Ant P,可以是一个或两个。 - galaxyan
为什么?你现在的写法很符合惯用语。 - Paul Butcher
@user3254788,我不确定你的问题,但是你当前的代码不能编译(至少使用C#编译器),你可以使用char.ToUpperInvariant,这比char.ToUpper更好。 - Habib
显示剩余6条评论
3个回答

15

您只需要像这样在您现有的代码中使用 break;:

switch (code)
{
    case 'A':
    case 'a':
        break;
    // to do 
    default:
        // to do 
        break;
}

但是如果您要比较大小写字符,那么可以使用char.ToUpperInvariant,然后仅指定大写字符的情况:

switch (char.ToUpperInvariant(code))
{
    case 'A':
        break;
    // to do 
    default:
        // to do 
        break;
}

2

http://msdn.microsoft.com/en-us/library/06tc147t.aspx

class Program
{
    static void Main(string[] args)
    {
        int switchExpression = 3;
        switch (switchExpression)
        {
            // A switch section can have more than one case label. 
            case 0:
            case 1:
                Console.WriteLine("Case 0 or 1");
                // Most switch sections contain a jump statement, such as 
                // a break, goto, or return. The end of the statement list 
                // must be unreachable. 
                break;
            case 2:
                Console.WriteLine("Case 2");
                break;
                // The following line causes a warning.
                Console.WriteLine("Unreachable code");
            // 7 - 4 in the following line evaluates to 3. 
            case 7 - 4:
                Console.WriteLine("Case 3");
                break;
            // If the value of switchExpression is not 0, 1, 2, or 3, the 
            // default case is executed. 
            default:
                Console.WriteLine("Default case (optional)");
                // You cannot "fall through" any switch section, including
                // the last one. 
                break;
        }
    }
}

0

Switch 会对每个满足条件的情况进行评估,直到遇到 breakdefault 或最终的闭合括号。

也就是说,它将执行任何匹配的 case 语句,直到遇到这些指令之一。

将所有等效的 cases 分组,并在最后添加一个 break 来合并它们。

请注意,如果没有匹配项,它将进入 default 块。


所以,如果第一条语句是 default,然后是 case 语句,那么 case 语句将不会被执行吗? - Thomas Matthews
Case和Switch语句相当于GOTO标签,因此如果任何一个case匹配,执行就会跳转到它;如果没有匹配(并且存在默认值),则跳转到默认值。所以,顺序并不重要。 - davbryn
但是你说过“...会评估每个条件,直到遇到break、default等情况为止”。所以如果default是第一个条件,它就停止了。 - Thomas Matthews
是的,所以Case 'A' = GOTO: a Case 'a' = 根据编译器可以生成的JMP,可以是GOTO }、GOTO 'break'或GOTO 'default'。 - davbryn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接