Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以清晰的方式编写这个嵌套的多条件分支?_C#_Conditional - Fatal编程技术网

C# 如何以清晰的方式编写这个嵌套的多条件分支?

C# 如何以清晰的方式编写这个嵌套的多条件分支?,c#,conditional,C#,Conditional,假设P1、P2、Q1和Q2是谓词 我提出了同一事物的两种实现: if (P1(x) ? P2(y) : true) && (Q1(z) ? Q2(w) : true ) do-something 及 我更喜欢第一个,因为它更简洁。但是我错过了什么吗 有没有比以上两种方法更好的方法来做同样的事情 如果有更多的谓词对R1和R2与P1和P2类似,那么第一种方法是好的还是最好的方法 将P2和Q2实现为函数是否总是更好?如果它们不是作为函数实现的呢?如果(!P1(x)| P2(y

假设
P1、P2、Q1
Q2
是谓词

我提出了同一事物的两种实现:

if (P1(x) ? P2(y) : true) && (Q1(z) ? Q2(w) : true )
    do-something

我更喜欢第一个,因为它更简洁。但是我错过了什么吗

有没有比以上两种方法更好的方法来做同样的事情

如果有更多的谓词对
R1
R2
P1
P2
类似,那么第一种方法是好的还是最好的方法


P2
Q2
实现为函数是否总是更好?如果它们不是作为函数实现的呢?

如果(!P1(x)| P2(y))和(!Q1(z)| Q2(w))做点什么

你缺少一个
。上面的内容真的很清楚吗?这显然是一个主观评估。哪一个更清楚?@PeterDuniho显然,这是编写表达式的一个非常好的方法,因为它清楚地显示了逻辑。使用
if/else
的等效逻辑也是可以接受的,并且在实践中可能需要,例如,如果您需要compute
y
如果您需要调用
P2
。有时,它可能有助于调试目的(更容易在特定情况下设置断点),或者如果表达式很长,则使代码更易于阅读……因为这似乎是一个关于函数代码可能排列的问题,它似乎更适合
if (P1(x)  &&  Q1(z) )
    if ( P2(y) && Q2(w) )
        do-something

if (P1(x)  &&  ! Q1(z) )
    if ( P2(y) )
        do-something

if ( ! P1(x)  &&  Q1(z) )
    if ( Q2(w) )
        do-something

if ( ! P1(x)  &&  ! Q1(z) )
    do-something