操作员问题&&

时间:2011-06-14 15:47:35

标签: c# operators

考虑以下代码

    public bool GetFalse()
    {
        return false;
    }
    public bool GetTrue()
    {
        return true;
    }

如何强制此表达式GetFalse() && GetTrue()执行第二个方法?

5 个答案:

答案 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