Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何转换日期时间?迄今为止_C#_Asp.net - Fatal编程技术网

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自动处理这些情况ng
false
并且不会引发异常。您不能将属性作为out参数传递,请参阅:
DateTime tmp;
DateTime? dateOfService = DateTime.TryParse(txtb_dateOfService.Text, out tmp)
   ? tmp
   : (DateTime?)null;