我要求
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> ?
答案 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
}