这样做有什么区别:
Dim strTest As String
If strTest > " " Then
End If
和此:
Dim strTest As String
If strTest <> "" Then
End If
我认为代码示例1是比较ASCII值(SPACE的ASCII代码是32)。我查看了MSDN上的String部分,但我找不到答案。
更新
我也对这里发生的事情感到困惑:
Dim strTest As String = "Test"
If strTest > " " Then
End If
答案 0 :(得分:1)
>
(大于)运算符将按字母顺序或字符代码值顺序(取决于Option Compare
设置)进行测试,而<>
(不等于)运算符将测试平等。只要两个字符串完全不同,<>
将始终评估为True
。只要运算符右侧的字符串按字母顺序排在第一个字符串之后,或者按字符代码值,>
将计算为true。因此:
Option Compare Text ' Compare strings alphabetically
...
Dim x As String = "Hello"
Dim y As String = "World"
If x <> y Then
' This block is executed because the strings are different
Else
' This block is skipped
End If
If x > y Then
' This block is skipped
Else
' This block is executed because "Hello" is less than "World" alphabetically
End If
但是,在您的问题中,您将空字符串变量(设置为Nothing
)与空字符串进行比较。在这种情况下,比较运算符将空变量视为空字符串。因此,Nothing <> ""
应评估为False
,因为运算符的两边都被视为空字符串。空字符串或空字符串应始终被视为排序顺序中的第一个,因此Nothing > "Hello"
应评估为False
,因为空字符串先于其他所有字符串。但是,Nothing > ""
应该评估为False
,因为它们都是相同的,因此它们都不会出现在另一个之前或之后。
要回答最后一个问题,"Test" > " "
将测试字母T是否在空格之前或之后。如果Option Compare
设置为Text
,它将按字母顺序进行比较,并应返回True
(这最终取决于您的语言环境的字母排序)。如果Option Compare
设置为Binary
,则会根据字符代码值对它们进行比较。如果它们是ASCII字符串,则空格字符的值低于字母,如T,因此它也应返回True
。