繁体   English   中英

具有可空日期时间的C#Null条件运算符

[英]C# Null Conditional Operator with nullable datetime

我试图学习使用null条件运算符,但似乎无法让它工作,

string datetest = DOInfolist[i].RentalItem.SimCard.DateIn[u].Value.ToShortDateString() ?? "Empty";

DateIn是可以为空的DateTime List<Datetime?>List<Datetime?> )。

我做了调试, DateIn[u]所有值都为null。

我究竟做错了什么?

如果DateIn数组中的所有值都为null ,则代码将抛出NullReferenceException

您可以在这里使用null-propagation-operator

string datetest = DOInfolist[i].RentalItem.SimCard.DateIn[u]?.ToShortDateString() ?? "Empty";

此运算符( ?. )现在返回一个可空字符串。 如果DateIn[u]具有值,则调用ToShortDateString()并且运算符返回带有返回值的可空字符串。
如果DateIn[u]null则运算符也返回null

你有一个错误。 首先通过HasValue检查null值并使用单个? 不是双倍?? 像下面的代码片段:

string datetest = DOInfolist[i].RentalItem.SimCard.DateIn[u].HasValue ? DOInfolist[i].RentalItem.SimCard.DateIn[u].ToShortDateString() : "Empty";

在你的情况下,该作业的正确工具将是GetValueOrDefault方法,如果nullable没有值,则提供默认值

var datetest = DOInfolist[i].RentalItem.SimCard.DateIn[u]
                            .GetValueOrDefault(defaultDate);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM