zoukankan      html  css  js  c++  java
  • 善用 AndAlso 及 OrElse 运算符

    在 VB.NET 中,一般的判断式都会使用到 Or 及 And 运算子,可是比较少人知道它们还有二个相对应的 OrElse 及 AndAlso 运算子。一般而言,笔者会建议所有的判断式都使用 OrElse 来取代 Or 运算子,使用 AndAlso 来取代 And  运算子。为什么呢?因为 OrElse 及 AndAlso 运算子的执行效能会优于 Or 及 And 运算子,以下就来说明其中的原由。


    OrElse 运算子

    意义:对两个运算式执行最少运算 (Short-Circuiting) 内含逻辑分离 (Logical Disjunction)。

    result = expression1 OrElse expression2

    使用 OrElse 运算子来结合多个判断式时,它会由前至后逐一评估每个判断式的结果,当判断过程中有其中一个判断式为 True 时,它就会略过后序的判断式,直接传回 True。也就是当 expression1 的评估结果为 True 时,expression2 就不会再去评估结果,当 OrElse 结合的判断式愈多时,更会突显出它的执行效能优势。

    我们来看看下面的程式码,同样的判断式分别使用 Or 及 OrElse 结合运算子。

            Dim oArray As ArrayList ’未使用 New 建立物件执行个体
            Dim bResult As Boolean

            ’会发生错误,因为 oArray 为 Nothing,不能直接使用它的 Count 属性
            bResult = (oArray Is Nothing) Or (oArray.Count = 0)

            ’不会发生错误,因为第一个判断式为 True 即传回 True,后序的判断式不评估
            bResult = (oArray Is Nothing) OrElse (oArray.Count = 0)

    上面的程式码中,若使用 Or 运算子会发生错误,因为 (oArray Is Nothing) 及 (oArray.Count = 0) 二个判断式会同时被评估,而这样的程式码很容易发生错误;因为一但 oArray 为 Nothing 时,后面的  (oArray.Count = 0) 一定会发生错误。上述使用 Or 运算子的判断式,要修正如下才是正确的。

            If oArray Is Nothing Then
                bResult = True
            Else
                bResult = (oArray.Count = 0)
            End If

    但使用 OrElse 运算子就没有这个困扰了,因为当 (oArray Is Nothing) 为 True 时,它就会马上传回 True,后面的 (oArray.Count = 0) 根本不会被评估;因为后面的判断式为 True 或 False 都不会影响结果,所以 OrElse 会对两个运算式执行最少运算,当然执行效能上相对好。


    AndAlso 运算子

    意义:对两个运算式执行最少运算逻辑交集运算。

    result = expression1 AndAlso expression2

    使用 AndAlso 运算子来结合多个判断式时,它会由前至后逐一评估每个判断式的结果,当判断过程中有其中一个判断式为 False 时,它就会略过后序的判断式,直接传回 False。也就是当 expression1 的评估结果为 False 时,expression2 就不会再去评估结果,当 AndAlso 结合的判断式愈多时,更会突显出它的执行效能优势。

    我们来看看下面的程式码,同样的判断式分别使用 And 及 AndAlso 结合运算子。

            Dim oArray As ArrayList ’未使用 New 建立物件执行个体
            Dim bResult As Boolean

            ’会发生错误,因为 oArray 为 Nothing,不能直接使用它的 Count 属性
            bResult = (oArray IsNot Nothing) And (oArray.Count > 0)

            ’不会发生错误,因为第一个判断式为 True 即传回 True,后序的判断式不评估
            bResult = (oArray IsNot Nothing) AndAlso (oArray.Count > 0)

    上面的程式码中,若使用 And 运算子会发生错误,因为 (oArray IsNot Nothing) 及 (oArray.Count > 0) 二个判断式会同时被评估,而这样的程式码很容易发生错误;因为一但 oArray 为 Nothing 时,后面的  (oArray.Count = 0) 一定会发生错误。上述使用 And 运算子的判断式,要修正如下才是正确的。


            If oArray IsNot Nothing Then
                bResult = True
            Else
                bResult = (oArray.Count > 0)
            End If

    但使用 AndAlso 运算子就没有这个困扰了,因为当 (oArray IsNot Nothing) 为 False 时,它就会马上传回 False,后面的 (oArray.Count > 0) 根本不会被评估;因为后面的判断式为 True 或 False 都不会影响结果,所以 AndAlso 可以执行最少运算逻辑交集运算,当然执行效能上相对好。

  • 相关阅读:
    C# BackgroundWorker使用总结
    C#如何优雅的结束一个线程
    C#线程中安全访问控件(重用委托,避免繁复的delegate,Invoke)总结
    C#异步方法调用(四大方法详解)
    C# Winform 跨线程更新UI控件常用方法汇总
    走进异步编程的世界
    走进异步编程的世界
    走进异步编程的世界
    Unity-Redis数据存储
    untiy
  • 原文地址:https://www.cnblogs.com/huige1004/p/1339882.html
Copyright © 2011-2022 走看看