c# - 为什么 C# 需要条件句周围的括号?

标签 c# syntax

我刚刚阅读了一个关于 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/

相关文章:

haskell - 比较语法树模 alpha 转换

c# - EF Code First - 缓存的迁移数据?

c# - XmlSerializer 和 XmlElement 字段

c# - 从统一命名空间中的另一个类(在克隆对象上)获取一个函数,c#

Swift 语法问题 : var a:Int64 = -7

c - C语言的语法错误

javascript - 计数元素之间的语法混淆

angularjs - 注入(inject) restangular 时出错

c# - 将项目引用的 PDB 文件包含到 nuget 包中

c# - 公共(public)静态变量 c# 使用正确吗?