【问题标题】:leave datetime picker returns 1 / 1 / 0001 12:00:00 AM in c#离开日期时间选择器在 c# 中返回 1 / 1 / 0001 12:00:00 AM
【发布时间】:2016-08-02 17:17:47
【问题描述】:

我在课堂上定义了这个

 public DateTime? LineCheckSubmitDateTime { set; get; }

我需要使用我的gridview 初始化这个变量

但有时我需要将此值保留为空,但当我离开时它返回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:你有更好的解决方案吗?

【问题讨论】:

    标签: c# datetime nul


    【解决方案1】:

    错误是因为您必须将条件运算符的至少一个操作数显式转换为DateTime?

    更好的方法是将其与DateTime.MinValue 进行比较,而不是将最小日期字符串转换为DateTime,并缓存转换后的值,然后在条件运算符中使用它,而不是将其转换两次。

    var tempDateConverted = Convert.ToDateTime(gridViewDetails.GetRowCellValue(rowHandle, "LineCheckSubmitDateTime"));
     newObj.LineCheckSubmitDateTime = tempDateConverted == DateTime.MinValue ?
                                        null : (DateTime?) tempDateConverted;
    

    您还可以在上述语句中显式null 转换为DateTime?

    我不确定GridView 中的LineCheckSubmitDateTime 控件,有可能它的值已经是DateTime 对象,在object 中返回。你也可以试试:

    object obj = gridViewDetails.GetRowCellValue(rowHandle, "LineCheckSubmitDateTime");
    newObj.LineCheckSubmitDateTime = (DateTime?) obj;
    

    使用上面的代码,您不必调用Convert.ToDateTime

    【讨论】:

    • @EhsanAkbar,在代码中犯了一个错误,而不是 DateTime? 我有 DateTime。现在修改代码。应该没问题的。
    • Habib 不幸的是我有同样的错误你是否更改代码?
    • 你不应该再得到那个错误,是的,我已经改变了代码。
    • 事实上我把你的代码复制到我的vs中,但我有同样的错误。
    • 在 VS 中注释掉这些行。 clean ,重建你的代码,一旦成功构建,然后在你的代码中取消注释这些行并重试。 Visual Studio 版本可能存在问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    相关资源
    最近更新 更多