跨越多行的长表达式

时间:2016-02-16 13:20:18

标签: vb.net

这是一个简单的问题,但它让我头疼。我有一个很长的if条件,而不是在一行上写,我想在多行上写清楚。

我做了一些研究并设法找到使用& _,我可以在下一行写下表达式。但是,如果我写的话:

If Not (DataGridView1.Rows(counter).Cells("User").Value Is Nothing) And & _
       (DataGridView1.Rows(counter).Cells("id number").Value Is Nothing) And & _
       (DataGridView1.Rows(counter).Cells("Emailaddress").Value Is Nothing) And & _
       (DataGridView1.Rows(counter).Cells("Date").Value Is Nothing) And & _
       (DataGridView1.Rows(counter).Cells("phone no.").Value Is Nothing) Then

....... 'do something here'
End If

问题在于And & _系统需要表达式。我尝试将& _移到其他位置,例如:IS Nothing之前,但没有运气。

任何人都可以帮助我

1 个答案:

答案 0 :(得分:3)

And &部分肯定是错误的,与换行符无关。你可以将整个混乱放在一行(删除所有的换行符),但它仍然无法编译。

VB.NET分别使用AndAndAlso作为其按位和逻辑AND运算符的名称。 And具有按位语义,如C#中的&AndAlso具有逻辑和短路语义,如C#中的&&。你不应该(实际上,不能)同时使用And&。你应该在这里使用AndAlso,因为你需要逻辑短路语义。

一行末尾的_字符用作行继续符。这就是你在网上看到的,this is correct。您可以使用它将表达式分成多行。

If Not (DataGridView1.Rows(counter).Cells("User").Value Is Nothing) AndAlso _
       (DataGridView1.Rows(counter).Cells("id number").Value Is Nothing) AndAlso _
       (DataGridView1.Rows(counter).Cells("Emailaddress").Value Is Nothing) AndAlso _
       (DataGridView1.Rows(counter).Cells("Date").Value Is Nothing) AndAlso _
       (DataGridView1.Rows(counter).Cells("phone no.").Value Is Nothing) Then

....... 'do something here'
End If

但是,您可能根本不需要这样做。如果您使用的是相对较新版本的VB.NET implicit line continuation has been added to the language。任何运算符(如And)都将作为隐式行继续运算符。所以你可以这样做:

If Not (DataGridView1.Rows(counter).Cells("User").Value Is Nothing) AndAlso
       (DataGridView1.Rows(counter).Cells("id number").Value Is Nothing) AndAlso
       (DataGridView1.Rows(counter).Cells("Emailaddress").Value Is Nothing) AndAlso
       (DataGridView1.Rows(counter).Cells("Date").Value Is Nothing) AndAlso
       (DataGridView1.Rows(counter).Cells("phone no.").Value Is Nothing) Then

....... 'do something here'
End If

就个人而言,为了便于阅读,我会强制排列。但我认为VB.NET IDE会对你发起攻击,所以它可能不值得。