1

我们正在尝试从单独的 XML 文档中读取信息。

这是我们的代码:

'load the XMLTest document containing cars.
    Dim xml As XDocument = XDocument.Load("CreditApp.xml")


    Dim SSN As String = txtSSN.Text
    'get all car makes that are red.
    Dim query = From xe In xml.Descendants("SSN")
         Where xe.Element("SSN").Value = SSN
                Select New With {
                    .FName = xe.Element("FName").Value 'Error in code is here
                }

    'loop through query result output results.
    For Each element In query.ToArray
        MessageBox.Show(element.FName)
    Next

我们收到错误:

你调用的对象是空的。

我们也不确定它指的是什么。

4

1 回答 1

3

当您播种该消息时,这意味着您尝试访问当前值为 的变量的成员Nothing

Dim obj As Object = Nothing
Console.WriteLine(obj.ToString()) ' Null ref on obj access

VB.Net 中的值Nothing(类似于 C# null)意味着对象没有值。试图访问它的成员是在访问一个成员。运行时无法满足此请求,因此会引发异常以让您了解问题。

在此特定示例中,错误的最可能原因似乎是以下行

FName = xe.Element("FName").Value

此代码不会做任何事情来验证xe.Element("FName")不返回的内容Nothing,因此在访问 member 时可能会导致异常Value。要解决此问题,您需要防范这种可能性。最简单的方法是使用辅助方法

Public Function GetFNameValueOrEmpty(ByVal elem As XElement) As String
  Dim child = elem.Element("FName")
  If child Is Nothing Then
    Return String.Empty
  Else
    Return child.Value
  End If
End Function

使用此助手,您可以这样重写原始查询

Dim query = From xe In xml.Descendants("SSN")
         Where xe.Element("SSN").Value = SSN
                Select New With {
                    .FName = GetFNameValueOrEmpty(xe)
                }
于 2012-04-12T22:03:55.843 回答