2017-06-28 32 views
-2

getting system.ArgumentNullException由於我不能在這裏添加整個代碼,我張貼justa片段。 我得到和異常「System.ArgumentNullException」和一個錯誤,不能隱式地從Ins_ProjectTestCycleDet_Result轉換爲Project_List。當我將最後一個參數添加爲空(ST後)時,我開始出現這個錯誤。請幫助我知道究竟是什麼問題,因爲即使在數據庫中,我已將此特定字段設置爲允許爲空。在FirstOrDefault()

Project_List objProject_List = new Project_List(); 
objProject_List.Proj_Bill_ID = Convert.ToInt32(PID); 

objProject_List = _OCB.Ins_ProjectTestCycleDet 
        (Convert.ToInt32(PID), TID, RID, ECY 
        , TT, Convert.ToDateTime(GD), Convert.ToDateTime(SD) 
        , Convert.ToDateTime(EED), Convert.ToDateTime(ED) 
        , null, Convert.ToDecimal(TP), Convert.ToDecimal(TE) 
        , Convert.ToDecimal(TDA), Convert.ToDecimal(TR), TCR, ST, null 
        ).FirstOrDefault(); 
+0

然後'_OCB。 Ins_ProjectTestCycleDet'返回null。 –

+0

@PatrickHofman所以你的意思是它返回null,所以異常? – beginner

+0

這就是我說的,對吧? –

回答

1

如果加上去年空參數,比你應該去的方法Ins_ProjectTestCycleDet,並檢查該參數的處理後,會出現此異常。有2種可能性:

  1. 系統不作爲參數
  2. Ins_ProjectTestCycleDet(...)接受空返回null

要解決第一種情況下,你需要重寫Ins_ProjectTestCycleDet(... )邏輯,所以null將被接受或提供非空值。

要解決第二種情況,你可以改變表達式:

objProject_List = _OCB.Ins_ProjectTestCycleDet(...)?.FirstOrDefault(); 

在這種情況下objProject_List將是無效的,如果_OCB.Ins_ProjectTestCycleDet(...)返回null

0

代碼重組建議:

Project_List objProject_List = new Project_List(); 
objProject_List.Proj_Bill_ID = Convert.ToInt32(PID); 

var projList = _OCB.Ins_ProjectTestCycleDet(Convert.ToInt32(PID), TID, RID, ECY, 
       TT, Convert.ToDateTime(GD), Convert.ToDateTime(SD), Convert.ToDateTime(EED), Convert.ToDateTime(ED), null 
       , Convert.ToDecimal(TP), Convert.ToDecimal(TE), Convert.ToDecimal(TDA), Convert.ToDecimal(TR), TCR, ST, null); 

if(projList != null 
    && projList.Count > 0 
    && projList.FirstOrDefault() is Project_List) 
{ 
    objProject_List = projList.FirstOrDefault(); 
}