有没有任何整洁的方法来进行反向比较操作?

时间:2016-03-16 00:45:34

标签: c#

我要求

if (flag)  
{
   if (valA >= valB)  
   // some logics
}
else
{
   if (valA <= valB)
   // some logics
}

除了使用“重复代码”之外,还有其他方法吗?

我想以

的方式做到这一点
var reverseFactor = flag ? 1 : -1;
if (reverseFactor * valA >= reverseFactor * valB)

或使用

Func<int, int, bool> ?

4 个答案:

答案 0 :(得分:0)

不幸的是,这两个条件并不相互排斥,所以你不能使用&#34; XOR和一个标志&#34;反转条件的技巧:

if (flag ^ (a < b))

您可以选择不太可读的

if ((a == b) || (flag ^ (a < b)))

答案 1 :(得分:0)

if (flag ? valA >= valB : valA <= valB)
  // stuff

由于布尔表达式本身可以是其他表达式的一部分。

答案 2 :(得分:0)

你可以缩短语法以避免双if语句,因为你没有做任何事情,除非满足'两个ifs':

if (flag && valA >= valB)
{
  //true flag logic
}
else if (!flag && valA <= valB)
{
  //false flag logic
}

因此,如果您希望逻辑生成一个值,那么您可以将其转换为三元语句:

var result = (flag && valA >= valB) ? //True logic : if(!flag && valA <= valB) //False logic;

但这需要第二个if语句。

答案 3 :(得分:0)

这个怎么样:

if (Math.Sign(valA-valB) != (flag ? -1 : 1))
{
    //some logic
}