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

与条件运算符和逻辑运算符混淆-VB.net,vb.net,logical-operators,comparison-operators,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运算符比较的清晰示例,我的注释也没有帮助 有人能帮我解决这

我对VB.net有点陌生,因为我刚刚完成了一门C#课程,缺少括号会让我对如何编写某些运算符组合产生很多困惑

我试图在VB中重现的C#等值线如下:

if ( (a == 0 && b != null) || (a == 1 && c != null) )
我不知道如何在VB中编写,我尝试了许多And、Or、AndAlso、OrElse等的组合,但我无法达到预期的效果

我找不到任何关于C#v.s.VB.net运算符比较的清晰示例,我的注释也没有帮助

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

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

相当于:


如果((a=0且Also b不为零)或(a=1且Also c不为零))

则vb.net等价物将为

If (a = 0 AndAlso b IsNot Nothing) OrElse (a = 1 AndAlso c IsNot Nothing ) Then
注意在c#中,它应该是
a==0
而不是
a=0


通过全面比较进行签出。

在C#中,equals运算符是
=
,在VB中是
=

if((a==0&&b!=null)| |(a==1&&c!=null))
声明;//只有一句话

if((a==0&&b!=null)| |(a==1&&c!=null)){
语句;//任意数量的语句
}
此联机文件将为您将其转换为VB:

如果(a=0,并且b也不是零)或(a=1,并且c也不是零),那么
陈述
如果结束
C#
和&
在VB中转换为

C#
|
在VB中转换为
OrElse

使用这些运算符,一旦确定结果,评估就停止。这就是所谓的“短路”评估。例如,在
a和&b
中,如果
a
false
,则已知结果为
false
,而
b
将不进行评估。当评估有副作用(如执行数据库查询、引发事件或修改数据)时,这一点尤为重要。在类似于
person!=null&&person.Name==“Doe”
其中,如果第一个术语的计算结果为
false
,则第二个术语将引发异常


不使用短路计算的VB
布尔运算符的等价物是C#中的
&
。在这里,所有的条款都将被评估

如果(a=0或b=0和c=0),则
陈述
如果结束

我还没有测试过,但那是我记忆中的。将来,您可能会想尝试一些代码转换工具,其中一些工具非常准确,并且大多数工具您可以将代码片段发布到联机。谷歌c#到vb或类似的东西。老师不希望我们在If中使用任何括号,但无论如何,谢谢你,它似乎做到了这一点。另外,对于“a!=null”,他告诉我们使用“nota Is Nothing”,这有点让人困惑,所以感谢您告诉我们IsNot。如果可以避免的话,大多数程序员一开始不会编写如此复杂的条件语句。你可以告诉你的老师,反转消极措辞的条件句是一种标准的重构,并且在许多关于正确干净编码的书中都得到了支持,如果你的老师给你一个测试…按照他/她告诉你的方式填写。是否有必要使用
而不仅仅是
?@PaulStock C#&短路,其等效值是AndAlso。是的,“And”和“And”或“Or”在VB中的作用不同。@PaulStock和And”和“Or”是VB的二进制运算符,相当于C#和|哦,是的,我的意思是==,在两种语言之间切换时另一个让人困惑的事情。另外,谢谢你的链接。你的意思是如果((a==0&&b!=null)| |(a==1&&c!=null))注意,
=
我从其他命令中看到,缺少括号是老师要求的障碍,你知道语言支持它们。他对此有什么理由吗?由于运算符优先级的原因,某些情况将非常复杂,或完全不可能不使用parans。3+3\2与(3+3)\2不同。将表达式拆分为多个表达式是一种解决方案,但这意味着您正在执行编译器的工作。
if (a = 0 | b = 0 & c = 0) {
    statement;
}