.net - 为什么 AndAlso 不能替代 And

标签 .net vb.net

<分区>

Possible Duplicate:
Should I always use the AndAlso and OrElse operators?

在所有场景的实际实现中,逻辑表达式将为 AndAndAlso 返回相同的 bool 值,

为什么我们不总是使用 AndAlso 并在前一个条件为假时节省下一个条件的处理时间?换句话说,为什么 And 仍在使用?

最佳答案

VB.NET 中的 And 运算符执行两个 作业,它既是逻辑运算符又是数学运算符。早期版本的 Visual Basic 不区分这两者。根据设计,该语言被设计为易于使用,并且语言设计者希望避免迫使 Visual Basic 程序员了解差异。

虽然它给语言带来了一些怪癖,但效果很好。例如,True 的值不是 1,就像在许多语言中一样,它是 -1。您从 CInt(True) 获得的值。这允许忽略运算符的两种用法之间的差异,当 If() 语句使用 And 时,它仍然可以正常工作,例如,当左侧是整数而右侧是 bool 值时。

但是 And 运算符同时扮演这两个角色存在一个非常具体的问题。一个常见的用法是编写如下语句:

If ix < array.Length And array(ix) <> 42 Then
   '' do something
End If

该语句会使您的代码因 IndexOutOfRangeException 而崩溃。您的意思是“如果索引超出范围,则不必费心检查数组元素”。这就是所谓的“短路评估”。但这不是 And 运算符的作用,它会计算左右表达式。就像 And 运算符的数学版本一样。

短路评估很重要并且已经存在了很长时间。并在花括号语言中普遍采用,从 C 开始。它最终在 VB.NET 中也被采用,您可以这样写以避免异常:

If ix < array.Length AndAlso array(ix) <> 42 Then
   '' do something
End If

所以回答您的问题:是的,当您打算使用 And 运算符的逻辑版本时,请始终使用 AndAlso。 AndAlso 逻辑版本。

关于.net - 为什么 AndAlso 不能替代 And,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13782516/

相关文章:

.net - 在 .net 中解析 xml 的正则表达式

vb.net - 将图像从图片框保存到数据库时出现问题。 VB.Net 2008.框架3.5

mysql - vb.net 中的 SQL 语法错误

c# - 在 C# .NET 中检查静态或动态 IP 地址?

c# - 在哪里存储外部 DLL 文件?

c# - Children.Add(item) 值不在预期范围内

c# - 如何以可移植的方式在 C# 中播放压缩的声音文件?

.net - 如何通过运行PowerShell脚本显示实时输出?

vb.net - 上传多个文件 (VB.Net)

vb.net - 将月份名称转换为整数