c#语言switch语句可以没有default吗?(语言-c#)

学c++的时候好像讲过switch语句不能没有default,做题的时候是要一定加的,不然会报错。今天听了c#的课,说好像default可有可无。弄不清了。

先说结论
不管是c、c++、c#、java,所有这些支持switch语法的语言,都允许不写default,这不是个语法错误
但是写default是个好习惯,哪怕什么都不做,先摆在那放着也行,起码能提醒你还有这个可能性
再说c++和c#里switch语法的不同之处
c++里允许case不加break贯穿标签
c#里如果多个case对应同一段代码则允许这样
但是只要前面的case里有代码则必须加break,不允许继续贯穿

都需要

需要啊,除非你知道全部条件,否则你不知道全部条件情况,且不要 default 的话,你只能这样写:

public static string foo(int num)
        {
            switch (num)
            {
                case 0:
                    return "result 1";
                case 1:
                    return "result 2";
                case 2:
                    return "result 3";
            }
            return "no result";
        }

default 就是在 switch 的缺省情况,就是其他情况都不匹配的时候。也不见得 C++ 不能没有 default 吧,至少不会报错,没有 default 照样可以正常退出 switch 语句,只是需要知道所有的情况。

switch语句中不是必须有default选项的。你可能记错了。
若所有的case都不满足,则找default分支;若未找到则退出整个switch语句。

缺省情况下执行default,最好写上,保证规范

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 可以看下c++参考手册中的 c语言-语句
  • 除此之外, 这篇博客: 详解C语言中的switch语句中的 default语句 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    我们知道当前面的判断都不成立时,程序就会执行default语句,这里的default语句与位置无关,把它放到最后仅仅是因为可读性更好而已。

    例子:

    #include <stdio.h>				//头文件
    #include <windows.h>
    
    void Myprint(int x)				//定义函数
    {
    	switch(++x)					//开始执行判断,传入的结果进行自加
    	{
    	default:					//若下列判断都不成立,输出下列语句
    		printf("This is default! \n");
    		break;					//跳出判断	
    	case 3:	case 4:				//若值为3或4输出结果
    		printf("Three \n");		
    		break;					//若成立跳出判断
    	case 2:						//若上面判断不成立进行本次判断
    		printf("Tow \n");		
    		break;					//若成立跳出判断
    	case 1:						//同上
    		printf("one \n");
    		break;						
    	}
    	
    	return;						//返回结果
    }
    
    void main()						//程序入口
    {
    	Myprint(4);					//调用函数,传入参数2
    
    	return;						//程序结束
    }
    

    运行结果:
    在这里插入图片描述

    注:如果default在判断之前,一定要加break,否则就跟上面没加break的程序一样,下面的语句也会被无条件执行!


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^