在VB。And和AndAlso的区别是什么?我应该用哪一种?
当前回答
And运算符求两边的值,而AndAlso运算符求右边的值当且仅当左边为真。
一个例子:
If mystring IsNot Nothing And mystring.Contains("Foo") Then
' bla bla
End If
如果mystring = Nothing,则会抛出异常
If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
' bla bla
End If
这个不抛出异常。
所以如果你来自c#世界,你应该像使用&&一样使用AndAlso。
更多信息请访问:http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse/
其他回答
一种简单的思考方法是使用更简单的英语
If Bool1 And Bool2 Then
If [both are true] Then
If Bool1 AndAlso Bool2 Then
If [first is true then evaluate the second] Then
And操作符将在继续执行之前检查语句中的所有条件,而Andalso操作符将在知道条件为false时停止。例如:
if x = 5 And y = 7
检查x是否等于5,y是否等于7,如果两者都为真,则继续。
if x = 5 AndAlso y = 7
检查x是否等于5。如果不是,它不会检查y是否为7,因为它知道条件已经为假。(这叫做短路。)
通常人们使用短路方法,如果有理由显式地不检查第二部分,如果第一部分不为真,比如如果检查它会抛出异常。例如:
If Not Object Is Nothing AndAlso Object.Load()
如果使用And而不是AndAlso,它仍然会尝试Object.Load(),即使它什么都不是,这将抛出异常。
And运算符求两边的值,而AndAlso运算符求右边的值当且仅当左边为真。
一个例子:
If mystring IsNot Nothing And mystring.Contains("Foo") Then
' bla bla
End If
如果mystring = Nothing,则会抛出异常
If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
' bla bla
End If
这个不抛出异常。
所以如果你来自c#世界,你应该像使用&&一样使用AndAlso。
更多信息请访问:http://www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse/
对于所有那些说副作用是邪恶的人来说:在一种情况下有两个副作用是好的,那就是同时读取两个文件对象。
While File1.Seek_Next_Row() And File2.Seek_Next_Row()
Str1 = File1.GetRow()
Str2 = File2.GetRow()
End While
使用And可以确保每次检查条件时都使用一行。而AndAlso可能会读取File1的最后一行,而不消耗File2的行。
当然,上面的代码不会起作用,但我一直在使用这样的副作用,不会像有些人让你相信的那样,认为它是“坏”或“邪恶”的代码。它易于阅读和高效。
使用And和Or进行逻辑位操作,例如x% = y%或3
AndAlso和OrElse是If语句:
如果x > 3 AndAlso x <= 5那么
和
If (x > 3) And (x <= 5) Then
在我看来…
同样值得注意的是,(我)建议你在If语句中包含逻辑运算符的方程,这样它们就不会被编译器误解,例如:
If x = (y And 3) And also…
推荐文章
- 检查字符串是否包含字符串列表中的元素
- 最好的方法在asp.net强制https为整个网站?
- Lookup()和Dictionary(Of list()的区别
- .NET控制台应用程序中的全局异常处理程序
- 从SqlCommand对象获取生成的SQL语句?
- .Net数据结构:ArrayList, List, HashTable, Dictionary, SortedList, SortedDictionary—速度,内存,以及何时使用每个?
- 如何以编程方式将Word文件转换为PDF ?
- HTML编码问题-显示“”字符而不是“ ”
- 是否可以在。net中以彩色方式写入控制台?
- VB.NET中的And和AndAlso有什么区别?
- 如何检查树枝为空?
- 使用c#在文本中插入制表符
- 我如何让我的c#程序睡眠50毫秒?
- 堆栈的目的是什么?我们为什么需要它?
- 我如何获得一个人类可读的文件大小字节缩写使用。net ?