在VB。And和AndAlso的区别是什么?我应该用哪一种?
当前回答
对于所有那些说副作用是邪恶的人来说:在一种情况下有两个副作用是好的,那就是同时读取两个文件对象。
While File1.Seek_Next_Row() And File2.Seek_Next_Row()
Str1 = File1.GetRow()
Str2 = File2.GetRow()
End While
使用And可以确保每次检查条件时都使用一行。而AndAlso可能会读取File1的最后一行,而不消耗File2的行。
当然,上面的代码不会起作用,但我一直在使用这样的副作用,不会像有些人让你相信的那样,认为它是“坏”或“邪恶”的代码。它易于阅读和高效。
其他回答
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
同时计算Bool1和Bool2
If Bool1 AndAlso Bool2 Then
当且仅当Bool1为真时计算Bool2。
另见堆栈溢出问题:我应该总是使用AndAlso和OrElse操作符吗?
另外:对那些提到使用And的人的评论,如果表达式的右侧有副作用,你需要:
如果右侧有你需要的副作用,只需将其移到左侧,而不是使用“And”。只有在双方都有副作用的情况下你才需要"并且"如果你有那么多的副作用你可能做错了其他事情。一般来说,你应该更喜欢AndAlso。
对于所有那些说副作用是邪恶的人来说:在一种情况下有两个副作用是好的,那就是同时读取两个文件对象。
While File1.Seek_Next_Row() And File2.Seek_Next_Row()
Str1 = File1.GetRow()
Str2 = File2.GetRow()
End While
使用And可以确保每次检查条件时都使用一行。而AndAlso可能会读取File1的最后一行,而不消耗File2的行。
当然,上面的代码不会起作用,但我一直在使用这样的副作用,不会像有些人让你相信的那样,认为它是“坏”或“邪恶”的代码。它易于阅读和高效。
AndAlso很像And,除了它像c#和c++中的&&一样工作。
区别在于,如果第一个子句(AndAlso之前的子句)为真,那么第二个子句永远不会被求值——复合逻辑表达式是“短路的”。
这有时是非常有用的,例如在这样的表达式中:
If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
...
End If
如果myObj为null,则在上面的表达式中使用旧的And将抛出NullReferenceException。
推荐文章
- 是否可以在。net中以彩色方式写入控制台?
- VB.NET中的And和AndAlso有什么区别?
- 如何检查树枝为空?
- 使用c#在文本中插入制表符
- 我如何让我的c#程序睡眠50毫秒?
- 堆栈的目的是什么?我们为什么需要它?
- 我如何获得一个人类可读的文件大小字节缩写使用。net ?
- Visual Studio跳转到下一个错误快捷方式?
- 两个日期之间的月差
- 对于WCF客户端“使用”块问题,最好的解决方案是什么?
- Python是否支持短路?
- 什么时候我应该使用List vs LinkedList
- 为什么在IEnumerable上没有ForEach扩展方法?
- 在VB.NET中有条件三元运算符吗?
- 如何从内存流中获取字符串?