(OrElse和Or)和(AndAlso和And) - 何时使用? 在VB.NET中,有两组逻辑运算符:OrElse和Or以及AndAlso和And。这些运算符可以用于组合和比较多个条件。 OrElse和Or是逻辑或运算符,它们的作用是在两个条件中选择一个为True。如果第一个条件为True,那么第二个条件将不会被计算,因为已经满足了条件。 AndAlso和And是逻辑与运算符,它们的作用是在两个条件中同时判断是否为True。只有当两个条件都为True时,整个表达式才会返回True。如果第一个条件为

23 浏览
0 Comments

(OrElse和Or)和(AndAlso和And) - 何时使用? 在VB.NET中,有两组逻辑运算符:OrElse和Or以及AndAlso和And。这些运算符可以用于组合和比较多个条件。 OrElse和Or是逻辑或运算符,它们的作用是在两个条件中选择一个为True。如果第一个条件为True,那么第二个条件将不会被计算,因为已经满足了条件。 AndAlso和And是逻辑与运算符,它们的作用是在两个条件中同时判断是否为True。只有当两个条件都为True时,整个表达式才会返回True。如果第一个条件为

(OrElse和Or)以及(AndAlso和And)之间有什么区别?它们的执行效果有什么不同之处,比如正确性方面的好处?有没有任何情况下我不应该使用OrElse和AndAlso?

0
0 Comments

OrElse和AndAlso是用于逻辑运算的关键字,它们的区别在于Or和And关键字。而当使用Or和And时,条件语句中的所有条件都会被求值。然而,当使用OrElse和AndAlso时,只有第一个条件为真时,才会继续求值后面的条件。这种短路求值的特性在某些情况下非常有用,特别是当某个条件比其他条件更加复杂耗时时。下面是一个例子:

' 使用Or关键字,两个条件都会被求值
If Name = "Fred" Or Name = "Sam" Then
    ' ...
End If
' 使用AndAlso关键字,只有第二个条件在第一个条件为真时才会被求值
If Not SomeObject Is Nothing AndAlso CheckObjectExistsInDatabase(SomeObject) Then
    ' ...
End If

在这个例子中,第一个条件判断了两个名字是否为指定的"Fred"或"Sam",而第二个条件判断了一个对象是否存在于数据库中。如果使用Or关键字,无论第一个条件是否为真,都会继续求值第二个条件。但是,如果使用OrElse关键字,当第一个条件为真时,将不再求值第二个条件,这可以避免不必要的计算和资源消耗。

因此,当需要在条件语句中进行逻辑运算时,可以根据具体情况选择使用Or、And、OrElse或AndAlso关键字。根据条件的复杂性和性能需求,选择合适的关键字可以优化代码的执行效率。

0
0 Comments

在其他答案中提到的短路除外,Or / And可用作位运算符,而OrElse / AndAlso则不可。位运算操作包括组合Flags枚举的值,例如FileAttributes枚举,其中您可以通过FileAttributes.ReadOnly Or FileAttributes.Hidden指示文件既是只读又是隐藏的。

位运算符是用来对整数的二进制位进行操作的。其中的Or运算符用于将两个二进制数的对应位进行或运算,结果的每一位取决于对应位上两个操作数的值。而OrElse运算符和Or运算符的功能类似,不同之处在于Or运算符无论左侧的表达式是否为True,都会计算右侧的表达式,而OrElse运算符只有在左侧的表达式为False时才会计算右侧的表达式。

同样,And运算符用于将两个二进制数的对应位进行与运算,结果的每一位取决于对应位上两个操作数的值。而AndAlso运算符和And运算符的功能类似,不同之处在于And运算符无论左侧的表达式是否为False,都会计算右侧的表达式,而AndAlso运算符只有在左侧的表达式为True时才会计算右侧的表达式。

使用Or / And运算符时,无论左侧表达式的结果是什么,都会计算右侧的表达式。这可能会导致性能问题,尤其是在处理大量数据时。为了避免这个问题,可以使用OrElse / AndAlso运算符。这样,只有在必要时才会计算右侧的表达式,可以提高代码的效率。

在进行位运算或逻辑运算时,需要根据具体的需求选择使用Or / And运算符还是OrElse / AndAlso运算符。如果需要对所有的表达式进行计算,无论左侧的表达式是True还是False,可以使用Or / And运算符。如果只有在左侧的表达式为False或True时才需要计算右侧的表达式,可以使用OrElse / AndAlso运算符。

总之,使用Or / And运算符时会计算所有的表达式,而使用OrElse / AndAlso运算符只会在必要时计算表达式,可以提高代码的性能。根据具体的需求选择合适的运算符可以使代码更加高效。

0
0 Comments

OrElse和Or总是会评估两个表达式然后返回结果。它们不会短路。

OrElse和AndAlso是短路的。只有在左侧表达式的评估无法确定结果时,才会评估右侧表达式。(也就是说,如果左侧表达式为false,OrElse才会评估右侧表达式,如果左侧表达式为true,AndAlso才会评估右侧表达式。)

假设表达式中没有副作用,并且表达式不相互依赖(忽略任何执行开销),那么它们是相同的。

然而,在许多情况下,表达式是相互依赖的。例如,我们希望在List不为Nothing且具有多个元素时执行某些操作:

如果list IsNot Nothing AndAlso list.Length > 0 Then .. 'list has stuff

这也可以用来避免“昂贵”的计算(或副作用):

如果Not Validate(x) OrElse Not ExpensiveValidate(x) Then .. 'not valid

个人认为,在除了1%(或更少,希望如此!)需要副作用的情况下,使用OrElse和AndAlso是正确的操作符。

愉快的编码。

注1:第一个表达式引发的异常将阻止评估第二个表达式,但这应该并不令人惊讶。

0