VB.NET中,使用foreach搜索文本中的单词长度时,即使不在其中,也会返回1



所以我遇到了这个奇怪的问题,我无法直接指出原因。在我的Outlook应用程序中,我创建了一个加载项(Visual Studio-VB.NET),用于搜索正文中的单词(它搜索类似于问候语的结束标记)。

这些"结束标记"是在一个数组中设置的。它的作用是:将正文设置为文本的正文,但当找到结束标记时,只需将正文文本设置为结束标记。

然而,问题是,如果数组到达其末尾,但没有找到数组字符串,那么它总是运行另一次(如果数组为4,则意味着它运行第五次??),并将长度设置为1,而它应该为0(未找到)。

字符串的搜索是用Instr函数完成的,主体的切割是用Left函数完成的(从找到结束标记的点开始)。

这里是使其可视化的代码部分:

Dim BodyText As String
BodyText = oitem.Body
Dim ClosingTags(4) As String
ClosingTags(0) = "regards"
ClosingTags(1) = "your sincerely"
ClosingTags(2) = "yours truly"
ClosingTags(3) = "best wishes"
Dim MailClosing As String
Dim BodyUntil As String
For Each element In ClosingTags
MailClosing = InStr(LCase(BodyText), LCase(element))
If MailClosing <> 0 Then
BodyTextUntil = Left(BodyText, InStr(LCase(BodyText), LCase(element)) - 1)
BodyText = BodyTextUntil
Exit For
Else
BodyText = oitem.Body
End If
Next element

如果用户在其身体中使用了结束标记,则此功能正常工作。尽管当他们只是在没有结束标记的情况下键入文本时,它会出现故障。然后发生的是:

  1. foreach循环,找不到结束标记,所以它一直循环
  2. 通常情况下,它应该循环4次(array=4),但当没有找到标签时,它会以某种方式循环第五次,并将MailClosing变量设置为1,这会导致IF条件为true,而它应该为false,从而将主体设置为空(因为结束标签在位置1找到,并在1-1=0之后切断所有内容)

问题是,是什么导致了它,以及如何修复它?也许使用一个用于1-4(等于数组长度?)

Dim ClosingTags(4) As String

这创建了一个包含5个元素的数组(4是最大索引,而不是项目数量)

用途3:

Dim ClosingTags(3) As String
ClosingTags(0) = "regards"
ClosingTags(1) = "your sincerely"
ClosingTags(2) = "yours truly"
ClosingTags(3) = "best wishes"

相关内容

最新更新