使用AndAlso的Visual Basic If语句中的下划线(_)

时间:2018-08-31 19:31:05

标签: vb.net

很抱歉,如果在某处有记录,我无法以这种特定方式(如果不是,则用AndAlso语句)使用下划线找到答案。

这是我不明白的

Result: o 

如果我在这段代码中删除了下划线,VB2017会自动在代码第一行的末尾放置一个If Not variable Is Nothing _ AndAlso Not Results.Tables.Count = 0 _ AndAlso Not Results.Tables(0).Rows.Count = 0 Then ,并且在使用这两行的AndAlso上都出现2个语法错误。有人可以解释为什么吗?我在StackOverflow上读到,编译器不关心下划线,而且我还阅读了MSDN的AndAlso文档,我有些困惑。

谢谢您的帮助。

4 个答案:

答案 0 :(得分:8)

  

我在StackOverflow上读到,编译器不在乎下划线

那不是真的。 Implicit line continuations是Visual Basic语言 1 的较新版本。它们涵盖了很多(但不是全部)以前需要使用Role.Type=c("Other", "eIC", "eIC", "Manager", "eIC", "eIC", "Design", "eIC", "eIC", "Other", "Product", "Other", "Manager", "eIC", "eIC") Role=c('Agile Coach', 'Android', 'Backend', 'Eng Manager', 'Data', 'Data Scientist', 'Design', 'iOS', 'ML', 'Operations', 'Product', 'Quality', 'Director', 'User Research', 'Web') People=c(3, 3, 20, 11, 10, 7, 2, 2, 21, 1, 11, 3, 2, 2, 5) df <- data.frame(Role.Type, Role, People) g <- ggplot(df, aes(Role.Type, People)) + geom_col(aes(fill=Role), position='stack') + geom_text(aes(label=Role), size=3, position=position_stack(vjust=.5)) + scale_y_continuous(breaks=seq(0, 100, by=10)) + labs(title="Team Role Breakdown", y="People", x="Role Type") g 行连续字符的情况。

这是链接文档的完整列表:

  
      
  • 用逗号(_)之后。
  •   
  • 在圆括号(,)或圆括号(()之前。
  •   
  • 在打开大括号())或关闭大括号({)之前。
  •   
  • 在打开的嵌入式表达式(})之后或在XML文字内的嵌入式表达式(<%=)关闭之前。
  •   
  • 在串联运算符(%>)之后。例如:
  •   
  • 赋值运算符(&=&=:=+=-=*=,{ {1}},/=\=^=)。
  •   
  • 在二进制运算符(<<=>>=+-/*Mod,{ {1}},<><><=>=^ >> < / strong> 2 <<AndAndAlsoOr)。
  •   
  • OrElseLike运算符之后。
  •   
  • 在成员限定符(Xor)之后和成员名称之前。
  •   

这表明我们可以安全地在之后 Is添加行:

IsNot

我也建议重写如下,因为VB.Net使用.做奇怪的事情,将其用作按位而不是逻辑运算符 3

AndAlso

1。好的,2010年,但是我仍然发现很多VB开发人员不了解它们,或者不了解规则,但从不检查规则,要么避免使用规则,要么让编译器告诉他们何时添加规则。 2.强调我的。
3.另外,我发现不带否定项也更容易阅读。

答案 1 :(得分:1)

  

“如果只写一行代码,我仍然会收到语法错误”

这样可以编译:

If Not variable Is Nothing AndAlso Not Results.Tables.Count = 0 AndAlso Not Results.Tables(0).Rows.Count = 0 Then Exit Sub

这也可以编译:

If Not variable Is Nothing _
        AndAlso Not Results.Tables.Count = 0 _
        AndAlso Not Results.Tables(0).Rows.Count = 0 Then Exit Sub

这是行不通的:

If Not variable Is Nothing
        AndAlso Not Results.Tables.Count = 0 
        AndAlso Not Results.Tables(0).Rows.Count = 0 Then Exit Sub

在没有_下划线的情况下,它期望If语句在同一行上完全形成。

正如Joel所指出的那样,隐含的行连续要求在换行符之前使用AndAlso。见他的better answer

但是,要知道的是,在较新版本的编译器中使用Linq时,下划线不是必需的:

Dim interesting = From r As DataRow In Results.Tables(0).AsEnumerable()
                  Let fieldId = r.Field(Of Integer)("id")
                  Where fieldId <> 0
                  Order By fieldId
                  Select r

答案 2 :(得分:0)

这意味着“行在下一行继续”。

您也可以将其编写为:

If variable IsNoT Nothing AndAlso 
   Results.Tables.Count > 0 AndAlso 
   Results.Tables(0).Rows.Count > 0 Then
       'something
End If

答案 3 :(得分:0)

作为VB标准,If语句中的条件必须在一行上。由于某些条件可能太长而无法在一行上读取,因此下划线用作转义字符,指示该行未完成。 如果你写

 If Not variable Is Nothing 
AndAlso Not Results.Tables.Count = 0 
AndAlso Not Results.Tables(0).Rows.Count = 0 Then

Visual stdio将仅将第一行作为If语句的一部分生成结果:

 If Not variable Is Nothing Then
 AndAlso Not Results.Tables.Count = 0 
 AndAlso Not Results.Tables(0).Rows.Count = 0 Then

您需要将所有条件放在一行上或使用下划线。 这是VB中的标准。