【发布时间】:2015-08-28 09:02:27
【问题描述】:
我最近发现你可以对 if/else 语句使用以下语法:
if (a)
b = true;
else
b = false;
当你在其中嵌套另一个 if 子句时,它会变得混乱
if (a)
if (b)
c = 3;
else
c = 1;
但由于编译器会忽略行缩进,因此编译器总是将其解析为(据我了解)
if (a)
if (b)
c = 3;
else
c = 1;
是否可以不使用括号来实现第二个子句? (我知道这没有什么区别,但在我看来它更干净)
编辑:对于所有 cmet 提出的建议如下:
if (a && b)
c = 3;
else
c = 1;
这不一样。如果 a = true 且 b = false,c 将被设置为 1,但预期的值是它根本不会被设置。
【问题讨论】:
-
完全没用:if (a) if (b) c = 3;别的 ;否则 c = 1;
-
如果您对无括号、由空格确定的块更满意,您可能想尝试一下 F#。在 C# 中这样做会让很多人非常生气——它使代码难以阅读和推理。不要把你的风格带到一门新的语言中,除非它真的有帮助——在这种情况下,它肯定没有用,它会让任何维护你的代码的人的生活变得非常痛苦。跨度>
-
不,没有括号是不可能实现的。
-
@Kris 这不一样,如果你这样做,如果 a = true 和 b = false,它会将 c 设置为 1,这不是预期的行为。
-
@L0laapk3 哦,那很好。你已经得到了简短的答案。稍长一点的是:你不能像那样改变一种语言的优先规则。它们是在编译器中构建的,并且可以直接从 CST 构造过程中应用。
标签: c# if-statement