与条件和逻辑运算符混淆 - VB.net

时间:2011-09-13 19:46:15

标签: vb.net logical-operators comparison-operators

我对VB.net很陌生,因为我刚刚完成了一个C#课程,所以缺少括号会对如何编写某些操作符组合产生很多困惑。

我试图在VB中重现的行的C#等价物是这样的:

if ( (a == 0 && b != null) || (a == 1 && c != null) )

我不知道如何在VB中编写这个,我尝试了And,Or,AndAlso,OrElse等的许多组合,但我无法达到预期的效果。

我找不到任何关于C#v.s的明显例子。关于运算符的VB.net比较,以及我的注释​​也没有帮助。

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

vb.net等价物将是

If (a = 0 AndAlso b IsNot Nothing) OrElse (a = 1 AndAlso c IsNot Nothing ) Then

请注意,在c#中,它应为a == 0而不是a = 0

结帐this post并进行全面比较。

答案 1 :(得分:4)

等号运算符在C#中为==,在VB中为=

if ( (a == 0 && b != null) || (a == 1 && c != null) )
    statement; // One single statement only

if ( (a == 0 && b != null) || (a == 1 && c != null) ) {
    statement; // Any number of statements
}

此在线conversion tool会将其转换为VB:

If (a = 0 AndAlso b IsNot Nothing) OrElse (a = 1 AndAlso c IsNot Nothing) Then
    statement
End If

C#&&转换为VB中的AndAlso C#||转换为VB中的OrElse

使用这些运算符,一旦确定结果,评估就会停止。这被称为“短路”评估。例如。在a && b中,如果falsea,则结果为false,并且不会评估b。当评估具有副作用时,这一点尤为重要,例如执行数据库查询,引发事件或修改数据。它在像person != null && person.Name == "Doe"这样的条件下也很有用,如果第一项计算结果为false,则第二个会抛出异常。


不使用短路评估的VB AndOr布尔运算符相当于C#中的&|。这里将始终评估所有术语。

If (a = 0 Or b = 0 And c = 0) Then
    statement
End If
if (a = 0 | b = 0 & c = 0) {
    statement;
}

答案 2 :(得分:0)

if((a = 0&& b!= null)||(a = 1&& c!= null))

等同于:

if((a = 0 AndAlso b IsNot Nothing)OrElse(a = 1 AndAso c IsNot Nothing))