字符串操作时超出范围异常

时间:2015-01-14 12:42:58

标签: vb.net

我创建了一个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

1 个答案:

答案 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