操作员的问题&&;
本文关键字:amp 问题 操作员 | 更新日期: 2023-09-27 17:59:03
考虑以下代码
public bool GetFalse()
{
return false;
}
public bool GetTrue()
{
return true;
}
如何强制此表达式GetFalse() && GetTrue()
执行第二个方法?
尝试使用:
GetFalse() & GetTrue()
不能,因为逻辑AND运算符短路。在一般情况下,避免类似表达式的副作用是一个好主意,尽管有完全有效的用法(即if( someObj != null && someObj.Value == whatever )
)。你可以使用不会短路的按位和运算符(&
),但我不会这么做。
您应该先将这两个方法调用拆分为变量,然后在需要它们同时执行时执行检查。
bool first = SomeMethodCall();
bool second = SomeMethodThatMustExecute();
if( first && second )
{
// ...
}
使用非短路版本(不使用布尔值时也称为逐位AND):
GetFalse() & GetTrue();
这是一个优化问题。由于表达式中调用的第一个方法为false,因此整个表达式不可能为true,因此不调用表达式中的第二个方法。如果有必要将其称为副作用(依赖副作用的不良做法,但YMMV),则应使用类似的东西:
x = GetFalse();
y = GetTrue();
if (x && y) ...
假设您的实际功能执行一些特定任务,并返回一个指示(例如)成功或失败的值,我更希望将其写成
bool fooResult = DoFoo();
bool barResult = DoFar();
然后您可以在代码中使用fooResult && barResult
。