我刚刚阅读了一个关于 Python 的 SO 问题,并注意到 for 循环中缺少括号。对我来说看起来不错,然后我想知道:为什么 C# 需要它们?
比如我目前需要写:
if (thing == stuff) {
}
和
foreach (var beyonce in allthesingleladies) {
}
所以我想知道为什么我不会写:
if thing == stuff {
}
该语句中是否存在我不知道的句法歧义?
PS,有趣的是,大括号对于单行代码来说是可选的:
if (thing == stuff)
dostuff();
最佳答案
系统需要某种方式来了解条件何时停止以及语句何时开始。这意味着条件周围的括号是可选的,或语句周围的大括号是可选的。 C# 的设计者选择将大括号设为可选(如果只有一条语句)。
考虑一下:
if x == 12 - x == 3 ? x++ : x--;
可以编写一个解析器 来判断条件在哪里结束以及语句从哪里开始,但是需要括号会使它变得更加容易。在我的示例中,语法表明完整语句是 if (x == 12) { -x == 3 ? x++ : x--; }
。但是,在您点击第二个 ==
之前,您不知道 -
是语句的开头,它已经包含 3 个标记。
由于正确解析此类示例需要在输入流中提前查看任意数量的标记(并且可以说这会使代码更难被人类阅读),因此需要括号是有充分理由的。
关于c# - 为什么 C# 需要条件句周围的括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484358/