在这个不应该发生的String.Chars()数组上获得“System.IndexOutOfRangeException”

时间:2013-08-14 22:11:30

标签: vb.net string html-agility-pack

任何人都能够破译我可能会得到这个“System.IndexOutOfRangeException”吗?我已经查看了代码,并且String也不可能是空的,因为我创建的方法会在它捕获异常时返回一个字符串,其中包含单词“Nothing”。

这是我得到例外的地方:

Do While (Not (nodeStep Is Nothing))
    stepCmd = cmd + (XPathCommand.STEPCMD + ("/tr[" + stepCount.ToString + "]"))
    stepString = htmlManager.GetTextbyNode(htmlManager.GetNodebyXPath(stepCmd))
    stepChar = stepString.Chars(0) '<--- Exception thrown here!
    Select Case stepChar
        Case "D"
            testScript.StepDesc.Add(stepString.Replace("Description: ", ""))
        Case "E"
            testScript.StepExpect.Add(stepString.Replace("Expected: ", ""))
        Case "S"
            If Not (testScript.StepDesc.Count = testScript.StepExpect.Count) Then
                testScript.StepExpect.Add("< No expected step here >")
            End If
    End Select
    stepCount += 1
    nodeStep = htmlManager.GetNodebyXPath(cmd + (XPathCommand.STEPCMD + ("/tr[" + stepCount.ToString + "]")))
Loop

现在,htmlManager.GetTextbyNode方法本身就是HtmlAgilityPack.HtmlNode所在的位置,并在首先清理文本字符串后返回节点中的所有文本。问题是,该方法有一个catch all(对于没有任何文本的节点)返回字符串“Nothing”,如下所示:

Function GetTextbyNode(ByVal node As HtmlAgilityPack.HtmlNode) As String
    Try
        Return StringCleaner.Clean(node.InnerText)
    Catch
        'If find a NULL Text node
    End Try
    Return "Nothing"
End Function

因此,即使传递的节点有NULL文本,我也应该得到一个有效的String,对吧?如果我得到一个有效的字符串,那么String.Chars(0)应该至少有一个字母?我不应该回到NULL字符串,对吗?或者我错过了什么?

1 个答案:

答案 0 :(得分:0)

正如评论所说,很可能node.InnerText是空的,所以我建议改变这个方法

Function GetTextbyNode(ByVal node As HtmlAgilityPack.HtmlNode) As String
    Try
        If not String.isNullOrEmpty(node.InnerText) then
           Return StringCleaner.Clean(node.InnerText)
        End If
    Catch
        'If find a NULL Text node
    End Try
    Return "Nothing"
End Function