如果没有括号,请加倍

时间:2015-08-28 09:02:27

标签: c# if-statement

我最近发现您可以对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;

是否可以在不使用括号的情况下实现第二个条款? (我知道这没有区别,但在我看来它更清晰)

编辑:所有评论都提出以下内容:

if (a && b)
    c = 3;
else
    c = 1;

这不一样。如果a = true且b = false,则c将设置为1,但预期值是根本不设置。

4 个答案:

答案 0 :(得分:1)

好吧,如果你想将自己的语言带入C#,为什么不在风格?定义If方法!

public static void If(Func<bool> condition, Action ifTrue, Action ifFalse = null)
{
  if (condition()) ifTrue(); else if (ifFalse != null) ifFalse();
}

然后您可以用

代表您的代码
var a = false;
var b = true;
var c = 0;

If(() => a, () => If(() => b, () => c = 3), () => c = 1);
砰 - 没有牙套!你甚至不必缩进:-P如果有人认为这很难读,不要担心 - 毕竟,为什么你必须容纳其他程序员;如果最坏的情况发生,那么只需从旧的LISPers [1]招募你的C#,并且noöne会盯着这个;)

声明

  

别。

[1] - 对LISP或LISPers没有任何冒犯。

答案 1 :(得分:1)

如果您有 mutli-lines 条件,则必须放置大括号。 C#不关心像Python这样的缩进。

if(condition)
//enter if statement
//leave if statement

答案 2 :(得分:0)

你可以使用三元组,但如果逻辑很复杂,它可能会变得难看/难以阅读。

c = a ? (b ? 3 : 1) : c;

如果a为false,则c的值不会更改。

你可以删除括号,但嵌套的三元组很难读,我建议它们是反模式。

答案 3 :(得分:0)

if (a && b)
     c = 3;
else if (a && !b)
     c = 1;

这将完全符合您的要求。但是有一个括号的原因之一是避免这样的混乱。添加括号将使其更容易阅读。