2012-04-12 139 views
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 

我们得到的错误:未设置为一个对象的实例

对象引用。

我们不确定它是什么引用。

+1

这意味着你得到一个“空”。 – 2012-04-12 22:00:37

+0

我们试图将我们输入的SSN值与XML文档中的相同值匹配。然后根据该组数据填充其他标签。我们如何做到这一点。 – Robert 2012-04-12 22:02:14

+0

错误消息指向的代码行号是什么?您正尝试访问“null”值的属性。例如,也许'xe.Element(“FName”)'不匹配任何结果,所以当你说'.Value'时它会给出异常。 – mellamokb 2012-04-12 22:02:23

回答

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) 
       } 
+0

当我们实现上面的代码我们得到一个错误Option strict on需要所有的函数,属性和操作声明都有一个'as'子句 – Robert 2012-04-12 22:13:46

+0

@ user512915我的不好,把'As String'加入'Function' – JaredPar 2012-04-12 22:21:20

+1

将'As String'加入到函数头:'Public Function GetFNameValueOrEmpty(Dim elem As XElement)As String' – 2012-04-12 22:21:36

相关问题