从布尔隐式转换?到布尔

时间:2017-06-15 14:40:10

标签: vb.net boolean nullable implicit-conversion

我收到了一些隐式转换警告,我不能为我的生活弄清楚出了什么问题。我想我有精神障碍。

我看到从Boolean?Boolean的隐式转换的示例如下:

If Not calId Is Nothing Then
   Dim calendar As Model.Calendar = db.Calendars.First(Function(x) calId = x.id)
End If

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

使用callId.Value。如果callIdInteger?,则callId.ValueInteger。由于callId可以为空,因此表达式callId = x.id变为可为空Boolean,即Boolean?。由于您需要一个不可为空的Boolean表达式,请写

Dim calendar As Model.Calendar = db.Calendars.First(Function(x) calId.Value = x.id)

请注意,null测试也可以写为

If calId.HasValue Then

这种行为的原因是Nothing = x.id产生Nothing,而不是False

另请注意,calender仅限于Then - 块的范围。如果您需要在If-statement之后使用它,请在Dim之前放置If - 语句

Dim calendar As Model.Calendar = Nothing
If calId.HasValue Then
    calendar = db.Calendars.First(Function(x) calId.Value = x.id)
End If
Console.WriteLine(calender?.Date)