什么之间的区别还是和OrElse运算?
if temp is dbnull.value or temp = 0
Run Code Online (Sandbox Code Playgroud)
产生错误:
未对类型"DBNull"定义运算符"="并键入"整数".
而这一个就像一个魅力!?
if temp is dbnull.value OrElse temp = 0
Run Code Online (Sandbox Code Playgroud)
Aak*_*shM 138
OrElse是一个短路运营商,Or不是.
通过布尔'或'运算符的定义,如果第一项是True,则整体肯定是真的 - 所以我们不需要评估第二项.
OrElse知道这一点,因此temp = 0一旦确定,就不会尝试评估temp Is DBNull.Value
Or不知道这一点,并将始终尝试评估这两个术语.什么时候temp Is DBNull.Value,它不能与零比较,所以它会倒下.
你应该使用......好吧,无论哪个有意义.
小智 38
这与C#的行为相同,其中每个人都使用Coditional Or(||)和Conditional And(&&),其中你也有正常的Or(|)和普通的和(&).所以将C#与VB.Net进行比较是:
| =>或者
|| => OrElse
&=>并且
&& => AndAlso
condifitonal布尔运算符非常有用,可以防止嵌套if构造.但有时需要普通的布尔运算符来确保命中两个代码路径.
OrElse 评估第一个表达式,如果为真,则将继续执行该语句,而 OR 会先评估两个表达式,然后再继续执行其语句。
例子:
Textbox1.Text= 4
Textbox2.Text= ""
Run Code Online (Sandbox Code Playgroud)
使用 OrElse
If TextBox1.Text > 2 OrElse TextBox2.Text > 3 Then
MsgBox("True")
End If
Run Code Online (Sandbox Code Playgroud)
结果是:正确
使用或
If TextBox1.Text > 2 Or TextBox2.Text > 3 Then
MsgBox("True")
End If
Run Code Online (Sandbox Code Playgroud)
结果是:错误无法将字符串转换为双精度。
(我看了其他答案,发现我错了)
OrElse 运算符“对两个表达式执行短路逻辑或”,也就是说:如果左操作数为真,那么整个表达式保证为真,则右操作数甚至不会被计算(这在以下情况中很有用)案例如下:
string a;
//...
if (a is null) or (a = "Hi") //...
Run Code Online (Sandbox Code Playgroud)
以避免右侧操作数抛出 NullReferenceException。
我由衷地感到惊讶的是,这种(惰性求值or)并不是andC/C++ 和 C#(以及许多其他语言...)中的默认行为。
| 归档时间: |
|
| 查看次数: |
54389 次 |
| 最近记录: |