我最近发现您可以对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,但预期值是根本不设置。
答案 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;
这将完全符合您的要求。但是有一个括号的原因之一是避免这样的混乱。添加括号将使其更容易阅读。