C#合并datetime变量时Nullable<DateTime>无AddDays定义如何解决
报错原因与解决方案
报错原因
你遇到的报错是因为(dgFUList.SelectedItem as SelOutOrderInfo_OUT).NEXT_DAY的类型是System.Nullable<DateTime>(简写为DateTime?可空日期类型),而非原生DateTime类型。可空值类型本身没有定义AddDays方法,只有其内部包裹的DateTime有效值才支持调用AddDays方法。
解决方案
根据业务场景可选择以下两种处理方式:
场景1:可确定NEXT_DAY一定不会为null
直接调用可空类型的Value属性获取内部的DateTime值即可,修改后代码如下:
Int32 addDay = Convert.ToInt32((mcnon.model.SelectMCCodeAskOutObj as SelectMCCodeAsk_OUT).PRIORITY); this.dp_RST.SelectedDate = (dgFUList.SelectedItem as SelOutOrderInfo_OUT).NEXT_DAY.Value.AddDays(addDay);
场景2:NEXT_DAY可能存在空值
需要先做空值判断,避免触发空值引用异常,可自定义空值兜底逻辑,示例代码如下:
Int32 addDay = Convert.ToInt32((mcnon.model.SelectMCCodeAskOutObj as SelectMCCodeAsk_OUT).PRIORITY); var nextDay = (dgFUList.SelectedItem as SelOutOrderInfo_OUT).NEXT_DAY; // 空值时可根据业务需求替换为其他默认日期,示例用系统当前日期兜底 this.dp_RST.SelectedDate = nextDay.HasValue ? nextDay.Value.AddDays(addDay) : DateTime.Now.AddDays(addDay);
也可以用空合并运算符简化写法:
this.dp_RST.SelectedDate = (nextDay ?? DateTime.Now).AddDays(addDay);
额外注意
如果dgFUList.SelectedItem as SelOutOrderInfo_OUT也可能为null,建议提前对该对象做非空判断,避免触发空引用异常。
内容的提问来源于stack exchange,提问作者matt
相关产品推荐
相关产品推荐

