4

我已经提交txtb_dateOfService了填写表格但是如果txtb_dateOfService是 emapty 返回 null 如果不是 TryParse>我有这个错误的日期我不知道如何解决它

'System.DateTime.TryParse(string, out System.DateTime)' 的最佳重载方法匹配有一些无效参数

    DateTime? dateOfService= null;
    if (string.IsNullOrEmpty(txtb_dateOfService.Text))
    {
        dateOfService = null;

    }
    else
        if (DateTime.TryParse(txtb_dateOfService.Text, out dateOfService))
        {

        }
4

6 回答 6

6

您不能将引用传递给DateTime?期望的方法DateTime。您可以通过引入一个临时变量来解决此问题,如下所示:

else { // <<=== This is the final "else" from your code
    DateTime tmp;
    if (DateTime.TryParse(txtb_dateOfService.Text, out tmp))
    {
        dateOfService = tmp;
    } else {
        dateOfService = null;
    }
}
于 2013-01-03T17:59:47.010 回答
1

您的问题是转换DateTime?DateTime,反之亦然。该DateTime.TryParse方法的out参数不可为空;如果事件TryParse失败,out 参数将被分配DateTime.MinValue为其值。没有理由dateOfService从此代码段中将您的变量声明为可为空的类型。

于 2013-01-03T18:00:48.793 回答
1

如果解析失败,您可以抛出异常:

DateTime? dateOfService= null;
if (string.IsNullOrEmpty(txtb_dateOfService.Text))
{
    dateOfService = null;
}
else
{
    // will throw an exception if the text is not parseable
    dateOfService = DateTime.Parse(txtb_dateOfService.Text);  
}

或使用中间 DateTime 来存储解析结果:

DateTime? dateOfService= null;
if (string.IsNullOrEmpty(txtb_dateOfService.Text))
{
    dateOfService = null;

}
else
{
    DateTime temp;
    if (DateTime.TryParse(txtb_dateOfService.Text, out temp))
    {
        dateOfService = temp;
    } 
    else 
    {
        dateOfService = null;
    }
}

这些中的任何一个都可以在逻辑上简化;我正在展示完整的突破来传达逻辑。

于 2013-01-03T18:01:57.700 回答
0

您可以尝试将您string的转换为DateTime

DateTime? dataOfService = null;
DateTime output;

if (DateTime.TryParse(txtb_dateOfService.Text, out output))
   dataOfService = output;

现在您可以dataOfService用作 aNullable<DateTime>并检查它是否具有使用HasValueValue属性转换的有效数据。

于 2013-01-03T18:02:45.060 回答
0

您需要创建一个临时值来保存 out 参数TryParse

DateTime tmp;
if (DateTime.TryParse(txtb_dateOfService.Text, out tmp)) {
    dateOfService = tmp;
} else{
    dateOfService = null;
}

一个更简洁的例子

DateTime tmp;
DateTime? dateOfService = DateTime.TryParse(txtb_dateOfService.Text, out tmp)
   ? tmp
   : (DateTime?)null;
于 2013-01-03T18:02:51.833 回答
0

试试 dateOfService.Value,这应该可行(我认为)

于 2013-01-03T18:19:10.733 回答