考虑以下代码
public bool GetFalse()
{
return false;
}
public bool GetTrue()
{
return true;
}
如何强制此表达式GetFalse() && GetTrue()
执行第二个方法?
答案 0 :(得分:6)
尝试:
GetFalse() & GetTrue()
答案 1 :(得分:5)
你不能因为逻辑AND运算符短路。在一般情况下,最好避免像这样的表达式产生副作用,尽管有完全有效的用法(即if( someObj != null && someObj.Value == whatever )
。你可以使用bitwise和operator(&
)短路,但同样,我不会这样做。
您应该首先将这两个方法调用拆分为变量,然后执行检查是否需要执行它们。
bool first = SomeMethodCall();
bool second = SomeMethodThatMustExecute();
if( first && second )
{
// ...
}
答案 2 :(得分:4)
使用非短路版本(不使用布尔值时也称为按位AND):
GetFalse() & GetTrue();
答案 3 :(得分:0)
这是一个优化问题。由于表达式中调用的第一个方法是false,因此整个表达式不能为true,因此不调用表达式中的第二个方法。如果有必要将其称为副作用(不良做法依赖副作用,但是YMMV),应该使用类似的东西:
x = GetFalse();
y = GetTrue();
if (x && y) ...
答案 4 :(得分:0)
假设您的实际函数执行某些特定任务并返回一个指示(例如)成功或失败的值,我希望将其视为
bool fooResult = DoFoo();
bool barResult = DoFar();
然后您可以在代码中使用fooResult && barResult
。