在C#中等效的Visual Basic的And和Or?
我知道AndAlso
相当于&&
而OrElse
相当于||
。 但是,在C#中实现等效的Visual Basic And
的最简洁方法是什么 ?
例如,请考虑以下VB.NET代码。 ValidateForControl
方法执行一些validation并返回指定控件的状态是否有效。 如果所有控件都有效,则整个输入表单有效。 但是,即使一个控制无效(这要求操作员不要短路),每个控制也必须单独validation。 Visual Basic的And
运算符非常适合这种情况,但不幸的是,就我所知,C#中没有等效的运算符( &&
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)
另外,对于布尔值,在C#中的^
是等效于Visual Basic中的Xor
吗?
And
– > &
Or
– > |
是的, Xor
– > ^
&&的MSDN文档有一个示例,显示“常规AND”和“短路AND” &&
。
一定要评论你对&
的使用,因为大多数C#程序员都会期待&&
与bool
s。
您还可以编写And
扩展方法
static class BooleanExtensions { public static bool And(this bool lhs, bool rhs) { return lhs & rhs; } }
虽然你可能更好的只是坚持本机&
语法。 请注意, AndAlso
扩展方法不会有用,因为rhs
参数将作为方法调用的一部分进行评估。
你只需使用&
作为And
和|
为Or
。 当两个操作数都是布尔值时, ^
和!=
都等价于Xor
(和彼此)。
在历史上(B语言,C的前身),按位运算符(&|)被用作逻辑运算符,但由于它不进行短路,它们很快纠正了语言并引入了短路语(&& ||)
事实上,正因为如此,到目前为止,按位运算符优先级仍然具有相同的运算符关联性。 到目前为止,按位运算符(就像它的逻辑运算符)绑定到比较而不是表达式。
一个很好的例子,这个运营商的关联性……
if (A + B == C)
……之后没有:
if (A & B == C)
在第二个代码中, A
是独立评估的, B == C
是一起评估的。 这就是为什么我们需要为位运算符添加括号以实现与数学运算相同的运算符关联性。
if ( ( A & B ) == C )
C语言的语言不受影响,Java和C#的设计者可以打破传统,并为位运算符提供与算术运算符相同的运算符关联性。 但他们没有,所以那里的大型C代码库可以在那些语言上重复使用。
之前,我无法理解为什么&
和|
与+ - / *
行为不同。
要回答您的问题,只需使用按位运算符:
protected void Page_Load(object sender, EventArgs e) { bool isValid = A() & B(); Response.Output.Write("
Is Valid {0}", isValid); } bool A() { Response.Write("
TestA"); return false; } bool B() { Response.Write("
TestB"); return true; }
使用&
和|
。
在这种情况下,您可以使用按位和运算符 ( &
):
return this.ValidateForControl(this.firstNameTextBox) & this.ValidateForControl(this.middleNameTextBox) & this.ValidateForControl(this.lastNameTextBox) & this.ValidateForControl(this.streetAddressTextBox) & this.ValidateForControl(this.cityTextBox) & this.ValidateForControl(this.stateComboBox) & this.ValidateForControl(this.zipCodeMaskedTextBox) & this.ValidateForControl(this.phoneMaskedTextBox) & this.ValidateForControl(this.emailAddressTextBox) & this.ValidateForControl(this.checkInDateTimePicker) & this.ValidateForControl(this.checkOutDateTimePicker) & this.ValidateForControl(this.rentalUnitsGroupBox);
是的,xor拼写在C#中(与大多数类C语言一样)。