2012-04-12 253 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

相關問題