【问题标题】:Object Reference not set to an instance of an object frequently对象引用未经常设置为对象的实例
【发布时间】:2012-10-12 07:03:01
【问题描述】:

我经常收到此错误,但并非每次都出现。

Object reference not set to an instance of an object.

我正在使用以下代码:

Category n = new Category { 
                     ID = id, 
                     name = TxtName.Text, 
                     TopNav = Convert.ToInt32(Chk_Top.SelectedItem.Value), 
                     LeftNav = Convert.ToByte(Chk_Left.Checked ? "1" : "0"), 
                     Active = Convert.ToByte(Chk_Active.Checked ? "1" : "0"), 
                     Rank = Convert.ToInt32(Txt_position.Text), 
                     ParentID = pid, 
                     Image = name, 
                     Content = Content.Text, 
                     PageTitle = Txt_SpeakerTitle.Text, 
                     PageName = Txt_SpeakerTitle.Text, 
                     speakerpreview = Txt_Previewdesc.Text, 
                     PageDesc = Txt_SpeakerTitle.Text, 
                     PageKeyword = Txt_SpeakerTitle.Text, 
                     Filehandler = "speaker", 
                     SpeakerDetail = speakerdesc.Text, 
                     SpeakerTitle = Txt_SpeakerTitle.Text, 
                     SpotLightdesc = spotlightcontent.Text, 
                     Chk_Spot = Convert.ToByte(Chk_Spot.Checked ? "1" : "0"),
                     Catalogue = Catalogue };

db.Categories.InsertOnSubmit(n);

请提出建议。提前致谢。

【问题讨论】:

  • 您的代码中有一些内容为空。调试并观察你的属性和对象,直到你找到一个为空的。
  • 你在哪条线上?这意味着您设置的这些值之一经常为空,因此您失败了。现在我们可以告诉您它是哪一个。
  • 出于调试目的,删除简洁的对象初始化,即分别设置每个属性。然后你可以看到它中断的那一行。
  • 'Chk_Top.SelectedItem.Value' 可能是罪魁祸首,但正如 bittech 所建议的,调试器应该有助于分析错误。
  • Chk_Top.SelectedItem 经常为空,但并非每次都为空:)

标签: asp.net c#-4.0


【解决方案1】:

在行上放置一个断点并将鼠标悬停在每个属性上。

另一种方法是使用代码合同,如下所示:

Contract.Assert(TxtName != null);
Contract.Assert(!string.IsNullOrEmpty(TxtName.Text));
Contract.Assert(Chk_Top != null);
Contract.Assert(Chk_Top.SelectedItem != null);
... etc.

在您上面显示的代码之前。这会验证您的假设并在不满足假设时引发异常。

这样做的好处是每次运行时都会在代码的 DEBUG 版本中检查所有这些值,但在 RELEASE 编译时会忽略这些检查。

这样您可以查明问题并进一步搜索,找出问题所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多