I've just finished a code review with a colleague who's 1st language is not c#. As part of his solution there were several lines like this:
if (conditionA | conditionB)
//dostuff
Without even thinking about it I have always used the || (unless I want to do a bitwise operation).
Lets just clarify what | does. It a bitwise comparison for integral types e.g. (byte, int, etc..) and for bool types it performs a logical OR but checks both operands.
Most languages I've used short circuit the second check if the first check is true. If your condition has side-effects you need to be very careful.
Consider the following program:
namespace OrProgram
{
class Program
{
static void Main(string[] args)
{
if (ConditionTrue() | ConditionFalse() )
Debug.WriteLine("Outcome was True");
else
Debug.WriteLine("Outcome was False");
if (ConditionTrue() || ConditionFalse())
Debug.WriteLine("Outcome was True");
else
Debug.WriteLine("Outcome was False");
}
private static bool ConditionFalse()
{
Debug.WriteLine("ConditionFalse has been called");
return false;
}
private static bool ConditionTrue()
{
Debug.WriteLine("ConditionTrue has been called");
return true;
}
}
}
With the | operator you will get the output:
ConditionTrue has been called
ConditionFalse has been called
Outcome was True
With the || operator you will get:
ConditionTrue has been called
Outcome was True
So if you need to make sure both sides of the operator are called you can use the | operator but it would be much clearer if you did:
var isTrue = ConditionTrue();
var isFalse = ConditionFalse();
if (isTrue || isFalse)
Debug.WriteLine("Outcome was True");
else
Debug.WriteLine("Outcome was False");
That is all.