C# 如何转换日期时间?迄今为止
我已经提交了C# 如何转换日期时间?迄今为止,c#,asp.net,C#,Asp.net,我已经提交了txtb\u dateOfService来完成表格,但是如果txtb\u dateOfService是emapty返回null,如果不是trparse日期我有这个错误,我不知道如何修复它 匹配的最佳重载方法 “System.DateTime.TryParse(字符串,out System.DateTime)”有一些 无效参数 您不能将对DateTime?的引用传递到需要DateTime的方法中。您可以通过引入一个临时变量来解决此问题,如下所示: else { // <<=
txtb\u dateOfService
来完成表格,但是如果txtb\u dateOfService
是emapty返回null,如果不是trparse日期
我有这个错误,我不知道如何修复它
匹配的最佳重载方法
“System.DateTime.TryParse(字符串,out System.DateTime)”有一些
无效参数
您不能将对
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;
}
}
else{/您的问题是将DateTime?
转换为DateTime
,反之亦然。DateTime.TryParse
方法的out
参数不可为空;如果TryParse
失败,out参数将被指定为DateTime.MinValue
作为其值。没有理由声明>dateOfService
变量作为此代码段中的可空类型。如果分析失败,您可以引发异常:
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? 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? dataOfService = null;
DateTime output;
if (DateTime.TryParse(txtb_dateOfService.Text, out output))
dataOfService = output;
现在,您可以将dataOfService
用作null
,并检查它是否具有使用HasValue
和Value
属性转换的有效数据。您需要创建一个临时值来保留TryParse
的out参数:
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;
试用dateOfService.Value,这应该可以(我认为)首先使用可空值有什么原因吗?这段代码看起来可以很容易地在没有可空值的情况下重写。您还可以使用C中的??运算符“取消引用”可空值(如果可空值实际上为空,则提供默认值)。如果txtb\u dateOfService.Text
不是空的,但不是有效的(可解析的)文本,您要怎么做日期/时间值?不应该是dateOfService.value=tmp
?@JoelEtherton C#会自动处理这个问题。这不起作用,请检查我的答案。@benjamintueg它看起来对OP有效,不是吗?实际上之前不需要测试null或空。TryParse
会通过returni自动处理这些情况ngfalse
并且不会引发异常。您不能将属性作为out参数传递,请参阅:
DateTime tmp;
DateTime? dateOfService = DateTime.TryParse(txtb_dateOfService.Text, out tmp)
? tmp
: (DateTime?)null;