Object引用没有设置为object.mean的实例

时间:2012-04-12 21:58:52

标签: xml vb.net

我们正在尝试从单独的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

我们收到错误:

对象引用未设置为对象的实例。

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

1 个答案:

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