我创建了一个Do While循环,它将字符串拆分成电子邮件,然后向这些用户发送电子邮件。目前在字符串中我只有三封电子邮件。我正在使用Instr,Left和Len做老式的VB方式。我不能使用Split String,因为我需要首先使用这种方式。基本上在第二个循环中,它不会删除刚刚经过循环的电子邮件地址。但是在之前的循环中(目前只有3个)它确实删除了电子邮件地址。之后它会创建另一个子串,然后抛出超出范围。它包含指出索引和长度必须引用字符串中的位置的附加信息。但是,考虑到它是第一次尝试,我本以为他们这样做了。代码如下:
Dim sEmailAddress As String
Dim iPos As Integer
iPos = InStr(Me.Cc, ";")
Dim iLen As Integer
iLen = Len(Me.Cc)
Dim iRemainingLength As Integer = 0
Do While iPos <> 0
sEmailAddress = Left(Me.Cc, iPos - 1)
oNetworxEmail.AddToAddress(sEmailAddress)
iRemainingLength = iLen - (iPos)
Me.Cc = Me.Cc.Substring(iPos, iRemainingLength)
iPos = InStr(Me.Cc, ";")
Loop
If iRemainingLength > 0 Then
oNetworxEmail.AddToAddress(Me.Cc)
End If
答案 0 :(得分:0)
我不知道为什么你认为你不能使用String.Split来做到这一点。你当然可以,而且在我看来,这是完成任务的最佳方式。但是,如果你坚持这样做,那么异常是由你从cc字符串中删除项目但你永远不会更新你在循环外部存储在iLen中的字符串长度引起的。这是一个应该有效的版本。请注意,我还使用当前的.Net字符串方法,并使用Trim删除可能位于电子邮件地址之间的任何空格。
Do While Me.cc.Contains(";")
Dim iPos As Integer = Me.cc.IndexOf(";"c)
oNetworxEmail.AddToAddress(Me.cc.Substring(0, iPos).Trim)
Me.cc = Me.cc.Substring(iPos + 1)
Loop
oNetworxEmail.AddToAddress(Me.cc.Trim)
我建议不要使用此代码,我推荐使用String.Split,因为之前已经建议过。
[编辑] 以下是我使用String.Split
编写代码的方法For Each addr As String In Me.cc.Split(";"c)
oNetworxEmail.AddToAddress(addr.Trim)
Next