我在班上定义了这个
public DateTime? LineCheckSubmitDateTime { set; get; }
我需要使用gridview
但有时我需要将此值保留为null,但是当我离开它时它会返回1 / 1 / 0001 12:00:00 AM
所以这是我的代码:
newObj.LineCheckSubmitDateTime = (Convert.ToDateTime(gridViewDetails.GetRowCellValue(rowHandle, "LineCheckSubmitDateTime"))==DateTime.Parse("1 / 1 / 0001 12:00:00 AM") ) ? Convert.ToDateTime(gridViewDetails.GetRowCellValue(rowHandle, "LineCheckSubmitDateTime")):null;
所以有两个问题:
1:此代码返回此错误:
Severity Code Description Project File Line
Error CS0173 Type of conditional expression cannot be determined because there is no implicit conversion between 'DateTime' and '<null>'
2:你有更好的解决方案吗?
答案 0 :(得分:2)
错误是因为你必须将条件运算符的至少一个操作数显式地转换为DateTime?
更好的方法是将其与DateTime.MinValue
进行比较,而不是将最小日期字符串转换为DateTime
,并缓存转换后的值,然后在条件运算符中使用它而不是转换它两次。
var tempDateConverted = Convert.ToDateTime(gridViewDetails.GetRowCellValue(rowHandle, "LineCheckSubmitDateTime"));
newObj.LineCheckSubmitDateTime = tempDateConverted == DateTime.MinValue ?
null : (DateTime?) tempDateConverted;
您还可以在上述声明中明确将null
投射到DateTime?
。
我不确定LineCheckSubmitDateTime
中的GridView
控件,其值可能是DateTime
对象,在object
内返回。您也可以尝试:
object obj = gridViewDetails.GetRowCellValue(rowHandle, "LineCheckSubmitDateTime");
newObj.LineCheckSubmitDateTime = (DateTime?) obj;
使用上述代码,您不必致电Convert.ToDateTime
。