2011-03-22 41 views
0
_sponsorOrBankFacingBorrowerCompanyWizardData = CompanyData.GetCompanyWizardData(SponsorOrBankFacingBorrowerCompany.CompanyID); 

所以這裏的問題是,代碼試圖進入這個聲明,無論如何,我希望它只能走,如果它可以去,顯然。但是,如果我在Visual Studio 2010中僅在此對象上執行手錶SponsorOrBankFacingBorrowerCompany,則無法獲取任何屬性,方法,任何內容,都會得到空引用異常。需要檢查爲空的東西,拋出異常

如何在檢查甚至發生之前得到異常時檢查是否爲空?

這裏的手錶:

enter image description here

編輯:

public STPProject STPData 
     { 
      get { return _STPData; } 
      set 
      { 
       _STPData = value; 

       //set WebIds 
       foreach (STPCompany comp in _STPData.STPCompanyCollection) 
       { 
        comp.WebId = comp.WebId < 1 ? GetNextWebId() : comp.WebId; 
        foreach (STPContact cont in comp.STPContactCollection) 
        { 
         cont.WebId = cont.WebId < 1 ? GetNextWebId() : cont.WebId; 
        } 
       } 

       //must be before AttachSTPEvents 
       _STPData.AffiliateTradeIndicator = _STPData.AffiliateTradeIndicator.HasValue ? _STPData.AffiliateTradeIndicator.Value : false; 

       //set company wizard defaults 
       _sponsorOrBankFacingBorrowerCompanyWizardData = CompanyData.GetCompanyWizardData(SponsorOrBankFacingBorrowerCompany.CompanyID); 

       AttachSTPEvents(_STPData); 
      } 
     } 

消氣其他被拋出異常:

public STPCompany SponsorOrBankFacingBorrowerCompany 
     { 
      get 
      { 
       if (STPData.AffiliateTradeIndicator.Value) 
       { 
        return BankFacingBorrower; 
       } 
       else 
       { 
        return Sponsor; 
       } 
      } 
     } 
+0

當您從編輯器窗口的右邊滾動時,無法看到森林中的樹。 – 2011-03-22 13:36:04

+0

什麼是*贊助商或債券融資公司?如果它像你說的那樣是一個對象,那麼觀察窗口中的異常可能是一個調試器怪癖。通過檢查一個對象是否爲!= null,你不能得到空引用異常。如果SponsorOrBankFacingBorrowerCompany是一個屬性,那麼可能會在getter代碼中引發異常。 – Misko 2011-03-22 13:40:18

+0

我不知道該告訴你什麼,但我是,哈哈。這是在一個設置過載。 – slandau 2011-03-22 13:40:58

回答

2

類似下面的,除非我弄錯你的問題:

if (SponsorOrBankFacingBorrowerCompany != null) 
{ 
    _sponsorOrBankFacingBorrowerCompanyWizardData = 
     CompanyData.GetCompanyWizardData(
      SponsorOrBankFacingBorrowerCompany.CompanyID); 
} 

更新:

好吧,這是精心設計的,但將有希望使問題變得立即明顯,所以讓我們鑽下來,在很長的路要走;你可以修改你的財產的代碼如下所示:

public STPCompany SponsorOrBankFacingBorrowerCompany 
{ 
    get 
    { 
     if (STPData == null) 
     { 
      throw new InvalidOperationException("'STPData' is null"); 
     } 

     if (STPData.AffiliateTradeIndicator == null) 
     { 
      throw new InvalidOperationException(
       "'STPData.AffiliateTradeIndicator' is null"); 
     } 

     if (STPData.AffiliateTradeIndicator.Value == null) 
     { 
      throw new InvalidOperationException(
       "'STPData.AffiliateTradeIndicator.Value' is null");    ; 
     } 

     if (STPData.AffiliateTradeIndicator.Value) 
     { 
      return BankFacingBorrower; 
     } 
     else 
     { 
      return Sponsor; 
     } 
    } 
} 
+0

雖然這不會返回一個布爾值,但會引發異常。看看編輯,儘管它很小。 – slandau 2011-03-22 13:34:19

+0

好吧 - 似乎有一些運營商超載正在進行?我不是100%,但我確定我們沒有從問題中提供的數據中獲得完整的圖片。 – 2011-03-22 13:39:07

+0

是的。這是在一個setter超載內。 – slandau 2011-03-22 13:39:33

0

我打賭你得到從SponsorOrBankFacingBorrowerCompany吸空引用在這裏:

STPData.AffiliateTradeIndicator.Value 

檢查在所有這些部件調試器...