C# 如何在不引发任何异常的情况下对空值字符串使用datetime函数

C# 如何在不引发任何异常的情况下对空值字符串使用datetime函数,c#,datetime,C#,Datetime,我一直在使用C#来尝试将字符串解析为datetime格式。只要字符串不为null,它就可以工作,但当字符串为null时失败。 我使用了datetime.parse,但失败: Datetime.parse: Datetime ContactDate = DateTime.Parse((GetContactDateForClient(1)?.DisplayText)) -- (note: getcontactdateforclient.displaytext is one of my met

我一直在使用C#来尝试将字符串解析为datetime格式。只要字符串不为null,它就可以工作,但当字符串为null时失败。 我使用了datetime.parse,但失败:

Datetime.parse:

 Datetime ContactDate =   DateTime.Parse((GetContactDateForClient(1)?.DisplayText))  -- (note: getcontactdateforclient.displaytext is one of my method which gets back date in string format)
        DateTime value;
        Datetime ContactDate = DateTime.TryParse((GetContactDateForClient(1)?.DisplayText), out value)  ? value: (DateTime?) null;
每当我的方法返回日期为非null时,上面的代码就非常有效,但是如果它为null,那么上面的代码行就失败了。 我尝试了datetime.tryparse,但在编译过程中显示错误(“无法将System.datetime?转换为System.datetime”)
Datetime.TryParse:

 Datetime ContactDate =   DateTime.Parse((GetContactDateForClient(1)?.DisplayText))  -- (note: getcontactdateforclient.displaytext is one of my method which gets back date in string format)
        DateTime value;
        Datetime ContactDate = DateTime.TryParse((GetContactDateForClient(1)?.DisplayText), out value)  ? value: (DateTime?) null;
如果字符串为null,是否可以将“ContactDate”值指定为null,如果不为null,则在返回时获取该值(GetContactDateForClient(1)?.DisplayText)。
非常感谢任何指针。

您需要声明一个可为空的日期时间

试试这个

Datetime? ContactDate = DateTime.TryParse((GetContactDateForClient(1)?.DisplayText), out value)  ? value: (DateTime?) null;

您需要声明一个可为空的日期时间

试试这个

Datetime? ContactDate = DateTime.TryParse((GetContactDateForClient(1)?.DisplayText), out value)  ? value: (DateTime?) null;
是否可以将“ContactDate”值指定为空

当然,只需将其设置为可为null的类型:

Datetime? ContactDate = DateTime.TryParse(...
这就是最初的错误告诉您的:

“无法将System.Datetime?转换为System.Datetime”

您试图将
DateTime?
(可为null的
DateTime
)分配给
DateTime
。他们是不同类型的。只需使用相同的一致类型

是否可以将“ContactDate”值指定为空

当然,只需将其设置为可为null的类型:

Datetime? ContactDate = DateTime.TryParse(...
这就是最初的错误告诉您的:

“无法将System.Datetime?转换为System.Datetime”

您试图将
DateTime?
(可为null的
DateTime
)分配给
DateTime
。他们是不同类型的。只需使用相同的一致类型。

您可以尝试:

Datetime ContactDate =   DateTime.Parse((GetContactDateForClient(1)?.DisplayText ?? "your default value"))
您可以尝试:

Datetime ContactDate =   DateTime.Parse((GetContactDateForClient(1)?.DisplayText ?? "your default value"))

ContactDate的类型是
DateTime
将其更改为
DateTime?
例外情况来自于我认为过于复杂的带有大量条件的单行程序。将其重构为几行代码,这样就更可读,并且更容易使用断点进行调试,这没有什么错。使用
TryParse()
代替它,他已经在使用TryParse了?您没有阅读所有的问题吗?ContactDate的类型是
DateTime
将其更改为
DateTime?
例外情况来自于我所说的是一个非常复杂的带有大量条件的单行程序。将其重构为几行代码,这样就更可读,并且更容易使用断点进行调试,这没有什么错。使用
TryParse()
代替它,他已经在使用TryParse了?你没看完所有的问题吗?谢谢你的回答。编译错误现在消失了。让我端到端地运行它,看看它在null和非null字符串的情况下是否达到了预期效果感谢您的响应。编译错误现在消失了。让我端到端地运行它,看看它在null和非null字符串的情况下是否达到了预期效果感谢您的响应。在这种情况下,我不想指定默认值,因为在测试结束时,我必须将该值与从数据库返回的值进行比较。那么它是空的,我想保持它为空。谢谢你的回复。在这种情况下,我不想指定默认值,因为在测试结束时,我必须将该值与从数据库返回的值进行比较。那么它是空的,我想保持它为空。