VB.NET抛出“对象引用未设置为对象的实例”异常

时间:2012-05-26 17:05:33

标签: .net vb.net exception

为什么我会收到此异常?

  

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

使用:

wb.Document.GetElementById("formfieldv1").InnerText = "some value"

其中wbWebBrowser控件的名称。

以下是所有代码:

Private Sub btnSend_Click(sender As System.Object, e As System.EventArgs) Handles btnSend.Click
Dim strFrom As String = txtFrom.Text
Dim strTo As String = txtTo.Text
Dim strMsg As String = txtMsg.Text
wb.Document.GetElementById("formfieldv1").InnerText = strFrom ' strFrom fills fine
End Sub

更新

正如评论中所建议我修改了这样的代码:

  Dim doc = wb.Document

  If (doc Is Nothing) Then
     MsgBox("doc is nothing")
  End If


  Dim el = wb.Document.GetElementById("formfieldv1")

  If (el Is Nothing) Then
     MsgBox("el is nothing")
  Else
     el.InnerText = strFrom
  End If

我得到了el is nothing。我现在该如何解决这个问题?


或者,如果你们可以帮助我解决我的问题,那么:

How to fill html form using web browser control

1 个答案:

答案 0 :(得分:2)

我认为这是一个很好的例子,说明为什么将操作分解为多行,而不是尝试在一行中执行许多操作,尤其是在可以返回空值时。

如果你选择wb.Document.GetElementById("formfieldv1").InnerText = "some value"

并将其分解为

var document = wb.Document;
var element = document.GetElementById("formfieldv1");
element.InnerText = "some value";

当抛出异常时,失败的情况会更加明显。单步执行代码时,检查每个操作的结果也更容易。从编译的角度来看,它没有任何区别,它最终会被编译成相同的IL。

我认为在一行代码中尽可能多地做自然的愿望,但我认为在很多情况下它会损害可读性和调试能力。