很抱歉,如果在某处有记录,我无法以这种特定方式(如果不是,则用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文档,我有些困惑。
谢谢您的帮助。
答案 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 ,<<
,And
,AndAlso
,Or
)。- 在
OrElse
和Like
运算符之后。- 在成员限定符(
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中的标准。