【问题标题】:What does Object reference not set to an instance of an object.mean对象引用未设置为对象的实例是什么意思。
【发布时间】:2012-04-25 07:48:17
【问题描述】:

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

我们得到了错误:

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

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

【问题讨论】:

  • 这意味着你得到一个“NULL”。
  • 我们正在尝试将我们输入的 SSN 值与 XML 文档中的相同值相匹配。然后根据该组数据填充其他标签。我们如何实现这一目标。
  • 错误信息指向代码的第几行?您正在尝试访问具有 null 值的属性。例如,xe.Element("FName") 可能与任何结果都不匹配,所以当您说.Value 时,它会给出异常。
  • 您是否在调试器中单步执行了代码?我会确保您的查询确实有结果,并检查txtSSN.Text

标签: xml vb.net


【解决方案1】:

当您播种该消息时,这意味着您尝试访问当前值为 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)
                }

【讨论】:

  • 当我们实现上面的代码时,我们得到一个错误 Option strict on requires all function, property, and operation declarations to have a 'as' 子句
  • @user512915 我的错,将As String 添加到Function
  • 在函数头添加As StringPublic Function GetFNameValueOrEmpty(Dim elem As XElement) As String
  • 我现在遇到两个错误。 1. FName = GetFNameValueOrEmpty(xe) 错误为“FName”上的“预期声明”。 2. Public Function GetFNameValueOrEmpty(Dim elem As XElement) As String 错误为'Dim'上的'Specifiers only valid at the beginning of the declaration'。
  • @user512915 抱歉,该行是为了替换原始示例中的等效行。它不应该像那样独立存在
猜你喜欢
  • 2010-10-21
  • 2019-03-20
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多