以下是在 Visual Basic 中定义的比较运算符。
< 运算符
<= 运算符
> 运算符
>= 运算符
= 运算符
<> 运算符
这些运算符比较两个表达式,以确定它们是否相等,如果不是,则它们有何不同。
Is, IsNot并在 Like 单独的帮助页面上详细讨论。 此页上详细讨论了关系比较运算符。
语法
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
部件
result
必填。 一个 Boolean 表示比较结果的值。
expression1、expression2
必填。 任何表达式。
comparisonoperator
必填。 任何关系比较运算符。
object1、object2
必填。 任何引用对象名称。
string
必填。 任何 String 表达式。
pattern
必填。 任何 String 表达式或字符范围。
注解
下表包含关系比较运算符的列表,以及确定是resultTrue还是False的条件。
| 操作员 |
True 如果 |
False 如果 |
|---|---|---|
< (小于) |
expression1 < expression2 |
expression1
>= expression2 |
<= (小于或等于) |
expression1
<= expression2 |
expression1 > expression2 |
>(大于) |
expression1 > expression2 |
expression1
<= expression2 |
>= (大于或等于) |
expression1
>= expression2 |
expression1 < expression2 |
= (等于) |
expression1 = expression2 |
expression1 <> expression2 |
<> (不等于) |
expression1 <> expression2 |
expression1 = expression2 |
注释
= 运算符也用作赋值运算符。
Is运算符、IsNot运算符和Like运算符具有与上表中运算符不同的特定比较功能。
比较数字
将类型的 Single 表达式与类型之一 Double进行比较时,表达式 Single 将 Double转换为 。 此行为与 Visual Basic 6 中找到的行为相反。
同样,将类型的表达式与类型的DecimalSingle表达式进行比较,或者Double,表达式Decimal将Single转换为或Double转换。 对于 Decimal 表达式,任何小于 1E-28 的小数部分值都可能会丢失。 此类小数值损失可能会导致两个值在不使用时相等。 因此,在使用相等性(=)比较两个浮点变量时,应小心谨慎。 测试两个数字之间的绝对值是否小于可接受的小容差,这更安全。
浮点不精确
使用浮点数时,请记住,它们并不总是在内存中具有精确的表示形式。 这可能会导致某些作(例如值比较和 Mod 运算符)出现意外结果。 有关详细信息,请参阅 “数据类型疑难解答”。
比较字符串
比较字符串时,将根据字符串的字母排序顺序(具体取决于 Option Compare 设置)计算字符串表达式。
Option Compare Binary 基于派生自字符的内部二进制表示形式的排序顺序的字符串比较。 排序顺序由代码页确定。 以下示例显示了典型的二进制排序顺序。
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text 基于应用程序区域设置确定的不区分大小写的文本排序顺序的字符串比较。 在前面的示例中设置 Option Compare Text 和排序字符时,将应用以下文本排序顺序:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
区域设置依赖关系
设置 Option Compare Text时,字符串比较的结果可能取决于应用程序正在运行的区域设置。 两个字符在一个区域设置中可能相等,但在另一个区域设置中不相等。 如果使用字符串比较做出重要决策,例如是否接受尝试登录,则应发出区域设置敏感度警报。 请考虑设置或调用StrComp该设置Option Compare Binary,这将考虑区域设置。
使用关系比较运算符进行无类型编程
不允许在以下情况下Option Strict On使用关系比较运算符和Object表达式。 当是Off(expression1或expression2任一表达式Object)时Option Strict,运行时类型确定它们的比较方式。 下表显示了表达式的比较方式和比较结果,具体取决于作数的运行时类型。
| 如果作数为 | 比较为 |
|---|---|
双 String |
基于字符串排序特征的排序比较。 |
| 这两个数字 | 转换为 Double数值比较的对象。 |
一个数字和一个数字 String |
将 String 转换为数字 Double 比较,并执行数字比较。 如果无法转换为Double,String则会引发一个InvalidCastException。 |
两者都是非引用类型 String |
将引发 An InvalidCastException 。 |
数值比较被视为 Nothing 0。 字符串比较被视为 Nothing"" (空字符串)。
重载
关系比较运算符(<.、 <=、 >、 >=、 =) <>可以 重载,这意味着当作数的类型为该类或结构时,类或结构可以重新定义其行为。 如果代码对此类或结构使用这些运算符中的任何一个,请确保你了解重新定义的行为。 有关详细信息,请参阅 运算符过程。
请注意, = 运算符 只能作为关系比较运算符重载,而不能作为赋值运算符重载。
示例:
以下示例显示了用于比较表达式的关系比较运算符的各种用法。 关系比较运算符返回一个 Boolean 结果,该值表示有状态表达式的计算结果是否计算结果 True。 将和<运算符应用于>字符串时,将使用字符串的常规字母排序顺序进行比较。 此顺序可能取决于区域设置。 排序是否区分大小写取决于 选项比较 设置。
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
在前面的示例中,第一个比较返回 False ,其余比较返回 True。