由于我无法在此处添加整个代码,因此我发布的是一个片段。 我收到并且异常" System.ArgumentNullException"以及一个无法从Ins_ProjectTestCycleDet_Result隐式转换为Project_List的错误。当我将最后一个参数添加为null(在ST之后)时,我开始收到此错误。请帮助我知道究竟是什么问题,即使在数据库中我已将此特定字段设置为Allow null。
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 :(得分:1)
如果在添加最后一个空参数后发生此异常,则应转到方法Ins_ProjectTestCycleDet并检查如何处理此参数。有两种可能性:
要修复第一种情况,您需要覆盖Ins_ProjectTestCycleDet(...)逻辑,以便null可以接受或提供非空值。
要修复第二种情况,您可以将表达式更改为:
objProject_List = _OCB.Ins_ProjectTestCycleDet(...)?.FirstOrDefault();
在这种情况下,如果objProject_List
返回null
_OCB.Ins_ProjectTestCycleDet(...)
将为null
答案 1 :(得分: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();
}