2012-10-12 40 views
2

我收到此錯誤的頻率非常高,但並非每次。對象引用未經常設置爲對象的實例

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

請建議。提前致謝。

+2

您的代碼中存在空值。調試並觀察你的屬性和對象,直到找到一個爲空的對象。 –

+0

你在哪一行上得到它?這意味着您經常設置的這些值中的一個爲空,因此您失敗了。現在我們有辦法告訴你它是哪一個。 – Prescott

+6

出於調試目的,請刪除簡潔的對象初始化,即分別設置每個屬性。你可以看到它所在的線路。 –

回答

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編譯中。

通過這種方式,您可以查明問題並進一步搜索,找出問題所在。

相關問題