首页 / 知识
关于C#:switch语句中有多个case
2023-04-15 16:54:00

Multiple cases in switch statement有没有一种方法可以在不重复说明 我知道这是可行的:
但我想这样做:
这是我从另一种语言想到的语法,还是我遗漏了什么? 我想这已经被回答了。但是,我认为您仍然可以通过执行以下操作以更好的语法方式混合这两个选项:
对于你提到的第二种方法,C++中没有语法,也没有C语言。 你的第一种方法没什么问题。但是,如果范围很大,只需使用一系列if语句。 此语法来自Visual Basic Select…Case语句:
不能在C中使用此语法。相反,您必须使用第一个示例中的语法。 对于最初的问题来说有点晚了,但是我发布这个答案是希望使用较新版本(C 7——默认情况下在Visual Studio 2017/.NET Framework 4.6.2中提供)的人会发现它很有用。 在C 7中,使用switch语句现在可以进行基于范围的切换,这将有助于解决OP的问题。 例子:
笔记:
您可以省去换行符,这样可以:
但我认为那是不好的风格。 .NET Framework 3.5具有以下范围: 从msdn开始的可枚举范围 您可以将它与"contains"和if语句一起使用,因为就像有人说的那样,switch语句使用"=="运算符。 这里有一个例子:
但我认为我们可以有更多的乐趣:因为您不需要返回值,而且这个动作不带参数,所以您可以很容易地使用动作!
这个新方法的旧示例:
因为您传递的是动作而不是值,所以应该省略括号,这非常重要。如果需要带参数的函数,只需将 在C 3.0中,没有容易的部分应用程序来封装case参数相同的事实,但是您创建了一个小的helper方法(有点冗长,tho)。
下面是一个新的函数导入语句如何比旧的命令式语句更强大和优雅的例子。 @詹妮弗·欧文斯:你说得对,下面的代码是行不通的:
唯一的方法是:
您正在寻找的代码在VisualBasic上工作,您可以轻松地将范围…在没有选择开关或如果其他块方便,我建议,在非常极端的点,使.dll与VisualBasic和导入回您的C项目。 注意:VisualBasic中的等效开关是Select案例。 另一种选择是使用一个例程。如果案例1-3都执行相同的逻辑,那么将该逻辑包装在一个例程中,并为每个案例调用它。我知道这实际上并不能摆脱case语句,但它确实实现了良好的风格并将维护保持在最低限度。 [编辑]添加了替代实现以匹配原始问题…[/edit]
中高音
GCC实现了对C语言的扩展,以支持连续范围:
编辑:刚注意到问题的C标签,所以大概GCC的答案没有帮助。 C中开关的另一个鲜为人知的方面是它依赖于operator=并且由于它可以被覆盖,所以您可以有如下内容:
这是完整的C 7解决方案…
也适用于字符串…
实际上,我也不喜欢goto命令,但它在官方的MS材料中,这里都允许使用语法。 如果可以到达switch节的语句列表的端点,则会发生编译时错误。这就是所谓的"不摔倒"规则。实例
有效,因为没有开关节具有可到达的终结点。与C和C++不同,开关部分的执行不允许"下一步"切换到下一个开关部分,并举例说明
导致编译时错误。当一个switch节的执行后面跟着另一个switch节的执行时,必须使用一个显式的goto case或goto default语句:
开关部分允许有多个标签。实例
我相信在这个特殊的情况下,goto可以被使用,它实际上是唯一的解决方法。 来源:http://msdn.microsoft.com/en-us/library/aa664749%28v=vs.71%29.aspx 许多工作似乎都花在了寻找一种方法,使C最不常用的语法中的一个看起来更好或工作更好。我个人认为switch语句很少值得使用。我强烈建议您分析正在测试的数据以及您想要的最终结果。 例如,我们想快速测试已知范围内的值,看看它们是否是素数。你想避免让你的代码进行浪费性的计算,你可以在网上找到你想要的范围内的素数列表。您可以使用大量的switch语句将每个值与已知素数进行比较。 或者你可以创建素数的数组图,并立即得到结果:
也许您想看看字符串中的字符是否是十六进制的。您可以使用一个笨拙且稍大的switch语句。 或者,可以使用正则表达式来测试字符,或者使用indexof函数来搜索已知十六进制字母字符串中的字符:
假设您希望根据1到24之间的值执行三种不同操作中的一种。我建议使用一组if语句。如果这变得太复杂(或者数字更大,比如5个不同的动作,取决于1到90之间的值),那么使用枚举来定义动作并创建枚举的数组映射。然后,该值将用于索引到数组映射中,并获取所需操作的枚举。然后使用一小组if语句或一个非常简单的switch语句来处理产生的枚举值。 此外,数组映射将一系列值转换为动作的好处在于它可以很容易地被代码更改。使用硬接线代码,您不可能在运行时轻松更改行为,但使用数组映射,这很容易。 如果您有大量的字符串(或任何其他类型)大小写都在执行相同的操作,我建议使用与string.contains属性组合的字符串列表。 所以,如果你有这样一个大开关语句:
您可能希望用这样的if语句替换它:
这个比例适用于任何数量的字符串大小写。 为此,您将使用goto语句。例如:
|
最新内容
相关内容
linux中断命令语句?
linux中断命令语句?,系统,服务,状态,号码,进程,命令,信号,传播,互动,名称,在linux中如何终止指令的运行1、方法在“Terminal”终端输入“gnomelinux命令多个选项?
linux命令多个选项?,系统,工作,基础,信息,命令,工具,数据,不了,名称,环境,Linux系统基础操作指令1、linux常用命令有pwd命令、cd命令、ls命令linux多个窗口命令?
linux多个窗口命令?,工具,系统,命令,首页,技术,情况,终端,窗口,脚本,界面,Linux一次在多个服务器运行命令1、把你的命令写入一个shell脚本就行linux中有趣的命令?
linux中有趣的命令?,工作,系统,地址,信息,单位,命令,目录,代码,管理,标准,mv什么意思呢?MV的意思具体如下:mV是一个较小的电压单位,可以用毫伏表linux脚本多个命令?
linux脚本多个命令?,系统,工作,标准,服务,命令,软件,管理,连续,电脑,设备,linux脚本如何一键授权并执行1、chmod u+x file,如果只给文件所有者写5条linux命令语句?
写5条linux命令语句?,工作,地址,系统,信息,目录,命令,管理,标准,功能,文件,linux常用的命令有哪些1、linux系统常用操作命令如下:ls:全拼list,功linux命令语句规律?
linux命令语句规律?,系统,管理,基础,网络,信息,命令,服务,简介,工具,标准,linux必学的命令是什么?1、Linux常用的命令可以分为以下几类:安装和linux使用命令的方法?
linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,图标,linux的cd命令的使用方法1、cd ~:回到用户家目录。注:这得看你linux命令中有问号?
linux命令中有问号?,不了,系统,数字,权限,问号,文件,中文,乱码,字形,字母,linux文件权限所有者都是问号处理不了中文,形成乱码,乱码中,有的被解析linux多个命令输入?
linux多个命令输入?,系统,工具,工作,命令,电脑,地址,信息,软件,服务,连续,Linux多台主机批量执行命令执行命令(记得先对doCommand.s h增加执行linux循环语句命令?
linux循环语句命令?,地方,增长,数字,语句,流程,名称,工具,代码,数据,条件,Linux入门系列——awk命令详解1、其中command是真正的awk命令,-F表示linux启动多个命令?
linux启动多个命令?,密码,工作,对比,设备,标准,代理,第一,命令,参数,脚本,重启服务器的linux命令首先我首要把linux开机, 命令 rebot 这个是lin