- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这不是一个特定的 C# 问题,而是 switch
的 C# 版本让我问了这个问题。
为什么我必须明确声明我不想从一个 case
语句跳转到下一个,而不是指示我何时想跳槽?
在 C# 中,编译器不会让您从一个 case
语句跳到下一个(除非 case
语句为空),但它会强制您输入每个代码末尾都有一个明确的 break
。我编写的绝大多数 switch
语句都没有落空。
int x = 4;
string result;
switch (x)
{
case 1:
result = "One";
break;
case 2:
result = "A couple";
break;
case 3:
case 4:
result = "Three or four";
break;
/*
case 5:
result = "Five"; // Here be an error! A common typo for me!!!
*/
default:
result = "Five or more";
break;
}
上面的例子是为了展示可能性而设计的。我实际失败的次数(比如上面的 3 到 4 次)很少。如果我从上面的案例 5 中删除注释,C# 编译器会将其捕获为错误。如果编译器完全知道我要做什么,为什么我必须手动修复它?
下面的不是更好吗?
int x = 4;
string result;
switch (x)
{
case 1:
result = "One";
case 2:
result = "A couple";
case 3:
continue; // or even goto 4
case 4:
result = "Three or four";
/*
case 5:
result = "Five"; // This would not longer be an error!! Hooray!
*/
default:
result = "Five or more";
}
让我明确一点,我并不是在提倡失败。在每个 case
语句的末尾都有一个隐含的 break
。这两个示例在功能上是等效的。
如果我忘记了案例 3 中的 continue
语句,编译器仍然会对我大吼大叫。不过这种情况不会经常发生,我很乐意提供帮助。事实上,在这种情况下,我错过填写骨架代码的可能性非常高。有用。告诉我我忘记了 break
语句是没有用的。让编译器开心只是更忙的工作。
看起来这可能只是 C 的保留(即使在 case 语句中有代码,它也允许你失败)。是否有更深层次的原因我没有看到?
今天早上我正在查看一些编译器代码,在 switch
中有数百个 case
语句,除了返回操作码外什么也没做。他们每个人都有一个 break
语句。太多的打字和困惑......
人们怎么想?为什么第二个选项不是更好的默认值?
最佳答案
C# switch
语句的基本原理是,C 的行为是 case 失败,除非你用 break
, return
这样的语句显式退出,或 goto
。这意味着每个熟悉 C 的人(可能是大多数 C# 程序员)都会期望 C# switch
语法的含义大致相同。如果 C# 设计者让案例不失败,代码将做与用户期望完全相反的事情!
另一方面,错误的常见来源是人们忘记了案例末尾的 break
语句,导致控制落入了不应该的位置。一个不太常见的问题是人们会重新排序案例,使得过去(不需要 break
)的案例不再在末尾(并且意外掉线) .
换句话说,让案例不失败会导致那些期望它失败的人的错误,但不要求明确终止案例会导致忘记放的人的错误在 break
中。因此,案例不会失败,但仍然需要 break
。
关于c# - 为什么不对 switch 语句强制执行显式 fall-through 而不是显式 break?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990245/
是否有效率偏好以下控制流选项之一用于循环或切换另一个? 选项 1: switch(...){ case 1: if (...) { ... } else if
我需要在某个地方修复一些 CSS,因为我的文本没有环绕,如果它是一个非常长的单词,它会无限期地继续下去。 在大多数情况下,我在我的 CSS 文件中尝试了 word-wrap: break-word;
这个问题在这里已经有了答案: What is the difference between "word-break: break-all" versus "word-wrap: break-word
我的问题: overflow-wrap: break-word 和 word-break: break-word 有区别吗? 非重复: 这里有一些现有的问题,乍一看可能是重复的,但实际上不是。 Wha
我目前想知道两者之间有什么区别。当我同时使用它们时,如果它不适合容器,它们似乎会打破这个词。但为什么 W3C 做了两种方式来做呢? 最佳答案 word-wrap: break-word 最近更改为 o
满足条件时如何跳出循环? 例如: for (i in 0..10){ if (i==3){ // equivalent of break } } 最佳答案 Q#没有中
CSS3 规范说部分支持 word-wrap:break-word; 在 Chrome 中你必须使用 word-wrap:break-all; 但是没有连字符。我正在使用 text-align:jus
我想在我的 View 列表中显示来自数据库的所有评论。但有时,评论会很长。我试图用 word-wrap:break-word 来“打破”它们,但没有结果——像这样的评论 aaaaaaaaaaaaaaa
我正在尝试将一个长 URL 放置在侧边栏中,以在表格单元格宽度的范围内中断和换行。我已将 style="word-break:break-all;" 添加到 td 和围绕文本和 URL 的 span
我有以下代码: public void post(String message) { final String mess = message; (new Thread() {
是否有 word-break: break-word 的 alternative 可以在 firefox 中使用? 在 firefox[版本 57.0] 中 在 Chrome [版本 62.0.320
在this question以及this blog ,其中提到了样式 word-break 及其值。此外,还有值 break-word 作为属于例如的东西。 自动换行类。 在最近的 VS 中 MVC
我正在尝试将文本包装在 td 中并使用以下样式 word-break:break-all 在 IE 中工作得很好,但在 Firefox 中失败,请注意这是不支持的!尝试了 http://petesbl
我正在使用“word-break: break-all”在任何字符之间插入分隔符。 但是,在 Chrome 中,它无法正常处理特定字符(例如冒号、分号、逗号),如下所示。 (我的代码笔在这里:http
它只有在我用不同的元素包裹 anchor 标记时才有效,但我正在阅读 html,所以我想将它添加为整个页面的样式。 最佳答案 我不确定你想在这里实现什么,如果你能分享一些代码片段会很好。 无论如何,我
这些看起来都是一样的,有什么区别? https://jsfiddle.net/pmuub8w1/2/ p{ word-break:normal; } p{
目前下面的代码,保持div宽度固定,换行由于break-all .Test{ float: left; margin-bottom: 2px; word-wrap:break-word; word-b
我正在使用 word-break: break-all; 并想知道如何让浏览器自动插入 hyphens ,如 MDN example 中所示. div { width: 80px; heigh
我的 html 有这种结构: content1 content2 content3 content4 content5 content6 co
我正在尝试对齐图像旁边的文本。我想考虑没有空格的长字符串。 我的css如下 .new_item { width: 100%; float: left; border-bottom: 1px solid
我是一名优秀的程序员,十分优秀!