我们正在尝试从单独的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
我们收到错误:
对象引用未设置为对象的实例。
我们也不确定它是指什么。
答案 0 :(得分: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
,因此在访问成员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)
}