离开日期时间选择器返回1/1/0001 12:00:00 AM in c#

时间:2016-08-02 17:17:48

标签: c# datetime nul

我在班上定义了这个

 public DateTime? LineCheckSubmitDateTime { set; get; }

我需要使用gridview

初始化此变量

enter image description here

但有时我需要将此值保留为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:你有更好的解决方案吗?

1 个答案:

答案 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