Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Equivalent of Visual Basic's And and Or in C#?

Tags:

c#

vb.net

I know that AndAlso is equivalent to && and OrElse is equivalent to ||. But what is the cleanest way to achieve the equivalent of Visual Basic's And and Or in C#?

For example, consider the following VB.NET code. The ValidateForControl method performs some validation and returns whether the state of the specified control is valid. The entire input form is valid if all controls are valid. However, each control must be individually validated even if one is invalid (which requires the operator not to short-circuit). Visual Basic's And operator is perfect for this situation, but unfortunately there's no equivalent operator in C# as far as I know (&& short-circuits).

Return _
    Me.ValidateForControl(Me.firstNameTextBox) And
    Me.ValidateForControl(Me.middleNameTextBox) And
    Me.ValidateForControl(Me.lastNameTextBox) And
    Me.ValidateForControl(Me.streetAddressTextBox) And
    Me.ValidateForControl(Me.cityTextBox) And
    Me.ValidateForControl(Me.stateComboBox) And
    Me.ValidateForControl(Me.zipCodeMaskedTextBox) And
    Me.ValidateForControl(Me.phoneMaskedTextBox) And
    Me.ValidateForControl(Me.emailAddressTextBox) And
    Me.ValidateForControl(Me.checkInDateTimePicker) And
    Me.ValidateForControl(Me.checkOutDateTimePicker) And
    Me.ValidateForControl(Me.rentalUnitsGroupBox)

Also, for booleans, is ^ in C# equivalent to Xor in Visual Basic?

like image 673
Jake Petroules Avatar asked Oct 14 '10 04:10

Jake Petroules


3 Answers

And --> &

Or --> |

Yes, Xor --> ^

like image 50
BobbyShaftoe Avatar answered Oct 20 '22 08:10

BobbyShaftoe


The MSDN documentation for && has a sample which shows both "regular AND" & and "short circuit AND" &&.

Be sure to comment your use of & as most C# programmers will be expecting && with bools.


You could also write an And extension method

static class BooleanExtensions
{
    public static bool And(this bool lhs, bool rhs)
    {
        return lhs & rhs;
    }
}

although you're probably better off just sticking with the native & syntax. Note that an AndAlso extension method wouldn't be useful as the rhs argument would get evaluated as part of the method call.

like image 7
Ðаn Avatar answered Oct 20 '22 09:10

Ðаn


You just use & for And and | for Or. Both ^ and != are equivalent to Xor (and each other), when both operands are booleans.

like image 1
Matthew Flaschen Avatar answered Oct 20 '22 10:10

Matthew Flaschen