asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

ASP.NET入门教程 9.2.1 运算符[4]


发布日期:2024年06月21日
 
ASP.NET入门教程 9.2.1 运算符[4]

逻辑运算符

逻辑运算符允许将表达式结合起来这些运算符如表所示

除了Not之外的其他运算符都需要两个表达式其格式如下所示

的结果更加明显

AndAls和OrElse运算符与And和Or有相同的结果但是存在细微的差别使用普通版本两个表达式(左侧和右侧)都要进行计算但是使用简化运算符时没有这个必要如果其中一个表达式可以保证结果则可以停止计算表达式例如考虑以下代码

dim Name As String=Dave

If Name=Dave Or Name=Dan Then

name is either Dave or Dan

End If

在这个示例中要检查Name是否为Dave然后还要检查Name是否为Dan现在考虑以下代码

If Name=Dave OrElse Name= Dan Then

这里首先检查Name是否为Dave如果是则不需要执行第二个表达式(检查Name是否为Dan)因为这不会影响结果在许多情况下使用何种形式(普通形式或简化形式)无关紧要但有时候也有关系例如想像如果不是简单地检查名字而是调用一个函数来更新数据库在使用普通形式时数据库将会更新但简化版本不调用该函数因而数据库不会被更新使用标准的And运算符代码如下所示

If UserIsInRole(Admin) And UserAudit(Admin) Then

user is an admin and their details have been updated

End If

即使当前用户不在Admin角色中该语句也会调用UserAudit函数因为使用And意味着要完成测试的两个部分要解决这个问题可以使用以下语句

If UserIsInRole(Admin) AndAlso UserAudit(Admin) Then

user is an admin and their details have been updated

End If

现在只有当用户处于Admin角色时才会调用UserAudit使用·AndAlso意味着如果检查的第一部分失败则不会计算第二部分因此不会运行UserAudit

在另一种情况下简化形式也会有用当您需要了解某个对象的属性是否存在一个值时您只要检查该对象是否存在而不是检查它是否被设置为Noting例如考虑以下代码其中的数据是从数据库获取的然后只有在返回一些行时才需要执行某个操作

Dim rdr As SqlDataReader

rdr=DataLayerGetProducts()

If rdr IsNot Nothing And rdrHasRows Then

假定由于某个原因数据库访问失败而且rdr被设置为空值即Nothing使用And的普通形式时两个表达式都会被检查首先完成Nothing的检查该检查返回False因为rdr为Nothing接下来完成第二个检查检查Boolean变量HasRows的属性看看是否返回一些数据但是rdr是Nothing因此会产生异常为了解决这个问题可以使用And的简化形式

If rdr IsNot Nothing AndAlso rdrHasRows Then

现在不会产生任何异常完成第一个检查后由于结果为False因此不进行第二个检查也没有这种必要因为第一个检查为False之后整个表达式不可能为True

[] [] [] [] []

               

上一篇:ASP.NET入门教程 9.2.1 运算符[5]

下一篇:ASP.NET入门教程 8.6 改善图片上传功能[3]