这个问题在这里已有答案:
我已经提交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))
{
}
你不能将对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;
}
}
如果解析失败,您可以抛出异常:
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;
}
}
其中任何一个都可以在逻辑上简化;我正在展示完整的突破以传达逻辑。
你的问题是将DateTime?
转换为DateTime
,反之亦然。 DateTime.TryParse
方法的out
参数不可为空;在TryParse
失败的情况下,out参数将被指定为DateTime.MinValue
作为其值。没有理由将此qamxswpoi变量声明为此片段中的可空类型。
你可以尝试在dateOfService
转换你的string
DateTime
现在你可以使用DateTime? dataOfService = null;
DateTime output;
if (DateTime.TryParse(txtb_dateOfService.Text, out output))
dataOfService = output;
作为dataOfService
并检查它是否有使用Nullable<DateTime>
和HasValue
属性转换的有效数据。
你需要创建一个临时值来保存Value
的out参数:
TryParse
一个更简洁的例子
DateTime tmp;
if (DateTime.TryParse(txtb_dateOfService.Text, out tmp)) {
dateOfService = tmp;
} else{
dateOfService = null;
}
尝试dateOfService.Value,这应该工作(我认为)