对象引用未经常设置为对象的实例

时间:2012-10-12 07:03:02

标签: asp.net c#-4.0

我经常收到此错误,但不是每次都收到此错误。

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);

请建议。提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

在您显示的代码之前。这会验证您的假设,并在未满足假设时抛出异常。

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

通过这种方式,您可以查明问题并进一步搜索,找出问题所在。