C# 的家伙会原谅我的 VB,但以下应该与这两种语言有关。编辑:它是相关的,但到目前为止没有人注意到 C# 和 VB 评估不同。问题调整。
以前,如果我们有简单的
If condition Then
ThenPart()
Else
ElsePart()
End If
并想将其重新排列成相反的顺序,我们交换ThenPart()
并ElsePart()
否定了条件(一般来说,通过使用Not(condition)
)。可以重新安排每个条件。
最近,引入了很棒的空条件运算符。随之而来的是不对称性。您不能再Not(condition)
与它们一起使用。还是我忽略了什么?(这就是问题。)
尝试在此处重新排列 ThenPart()
并按ElsePart()
相反顺序排列:
Dim list As List(Of Integer) = Nothing
If list?.Count > 0 Then
ThenPart()
Else
ElsePart()
End If
诀窍是空值出现在条件中,当然,它不能使用Not
. 因此,您不能使用平凡的否定If Not(list?.Count = 0)
,也不能使用If list?.Count <= 0
.
唯一的方法是老式的If list Is Nothing OrElse list.Count = 0
。 (确切的否定将使用<= 0
)(编辑:仅适用于 VB。VB 和 C# 在这里分歧,见下文。)
简单地否定每个运算符的琐碎时代已经一去不复返了(编辑:仅在 VB 中)。还是我忽略了什么?
经过进一步研究:
它看起来在 C# 中你可以安全地做!(list?.Count = 0)
,在这个发现之后,C# 摆脱了这个问题。这里没有不对称,你可以像以前一样否定。但据我所见,VB 中的不对称性仍然存在,因为null
Visual Basic中的求值类似于 ANSI SQL——空值通过表达式传播。所以在 VB 中,你不能list?.Count > 0
比If list Is Nothing OrElse list.Count = 0
. (这就是我使用“不对称”这个词的原因。)还是我忽略了什么?