我正在尝试学习使用null条件运算符,但似乎无法使其工作,
string datetest = DOInfolist[i].RentalItem.SimCard.DateIn[u].Value.ToShortDateString() ?? "Empty";
DateIn
是可以为空的DateTime
(List<Datetime?>
)列表。
我做了调试,DateIn[u]
中的所有值都为null。
我做错了什么?
答案 0 :(得分:6)
如果DateIn
数组中的所有值均为null
,则代码会抛出NullReferenceException
。
您可以在此处使用null-propagation-operator:
string datetest = DOInfolist[i].RentalItem.SimCard.DateIn[u]?.ToShortDateString() ?? "Empty";
此运算符(?.
)现在返回一个可为空的字符串。如果DateIn[u]
有值,则调用ToShortDateString()
并且运算符返回带有返回值的可空字符串。
如果DateIn[u]
为null
,则运营商也会返回null
。
答案 1 :(得分:2)
你有一个错误。首先按null
检查HasValue
值并使用单个?
而不是??
,如下面的代码段所示:
string datetest = DOInfolist[i].RentalItem.SimCard.DateIn[u].HasValue ? DOInfolist[i].RentalItem.SimCard.DateIn[u].ToShortDateString() : "Empty";
答案 2 :(得分:1)
在您的情况下,该作业的正确工具将是Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target = Me.Range("A1") Then
Select Case UCase(Target.Value)
Case "A"
Target.Value = "Auto"
Case "C"
Target.Value = "Close"
Case "T"
Target.Value = "Trigger"
End Select
End If
End Sub
方法,如果nullable没有值,则提供默认值
GetValueOrDefault