Visual Basic 中的表达式
托管表达式计算器接受大多数用 Visual Basic 编写的表达式。 在**“即时”**窗口中,表达式计算器仅支持单行语句。
下列各节提供特定信息并讨论某些不受支持或部分受支持的表达式类型:
强制转换
动态对象
函数计算
标识符和类型
导入别名
包含内部类型的对象变量
运算符
属性计算
字符串
TypeOf 运算符
不受支持的关键字
变量声明
WebMethods
Visual Basic 不支持用来以有意义的形式显示数据类型内容的自动展开规则。 有关详细信息,请参阅显示自定义数据类型的元素。
强制转换
简单强制转换在调试器中有效:
A = CStr(B)
动态对象
表达式计算器可以计算静态类型化为动态的变量。 还可以计算实现 IDynamicObject 接口的对象。 在**“监视”**窗口中计算实现 IDynamicObject 接口的对象时,会添加一个“动态视图”节点。 该动态视图节点显示对象成员,但不允许编辑成员的值。
不支持动态对象的下列功能:
复合运算符 +=、-=、%=、/= 和 *=
许多强制转换,包括数值强制转换和类型参数强制转换
带两个以上的参数的方法调用
带两个以上的参数的属性 getter
带参数的属性 setter
分配给索引器
布尔运算符 && 和 ||
函数计算
调试器支持函数的计算,包括重载函数。 因此,您可以输入下列表达式之一,并且调试器将调用重载函数的正确版本:
myFunction (param1)
myFunction (param1, param2)
在调试器中计算函数将调用并执行该函数的代码。 如果函数具有副作用(例如,分配内存或更改全局变量的值),则在调试器窗口中计算函数将更改程序的状态,这可能生成意外的结果。
在对重载函数设置断点时,断点的位置取决于指定函数的方式。 如果只指定函数名称,则调试器将对相应函数名称的每个重载设置一个断点。 如果指定完整签名、函数名称和完整参数列表,则调试器将对指定重载设置一个断点。
标识符和类型
调试器表达式可以使用在当前范围内可见的任何标识符。 例如,如果调试器在函数 Magh 中暂停,则可以使用在 Magh 中可见的大多数标识符(包括变量名和函数名)。 不支持局部常量。 可以设置在当前范围内可见的任何变量的值。
调试器可以正确显示任何基元类型或内部类型的变量。 对于类类型的变量,调试器基于派生程度最大的类型正确显示值。 如果具有从 Cat 类型派生的 Lion 类型的对象 leo,则可为 Lion 类型的对象计算 leo.Clawlength 并获取正确的值。
导入别名
不能在调试器窗口中使用导入别名。
包含内部类型的对象变量
包含内部变量类型(如整型)的对象变量的显示和编辑方式可能看起来不够直观。 例如,假定您的源代码包含如下所示的对象变量:
Dim obj As Object = 5
**“监视”**窗口将变量 obj 的值显示为:
5 {Integer}
若要将该变量的值更改为 6,则应输入:
6
不应输入:
6 {Integer}
编辑该值后,您将注意到调试器为您添加了 {Integer}。
运算符
调试器正确地计算大多数运算符,包括:
算术运算符:(expr1+ expr2、expr1- expr2、expr1* expr2、expr1/ expr2、expr1\expr2、expr1^expr2、expr1Modexpr2)。
赋值运算符:(var1= expr2、var1^= expr2、var1*= expr2、var1/= expr2、var1\= expr2、var1+= expr2、var1-= expr2、var1&= expr2)。
比较运算符:(expr2< expr2、expr2<= expr2、expr1> expr2、expr1>= expr2、expr1= expr2、expr1<> expr2)。
串联运算符:(expr1& expr2、expr1+ expr2)。
逻辑运算符:(expr1And expr2、expr1Or expr2、expr1XOr expr2、expr1AndAlso expr2、expr1OrElse expr2、Notexpr1)。
一元运算符:(- expr1、Not expr1、GetType (type))。
属性计算
调试器可以在任何变量窗口中计算属性。 不过,在调试器中计算属性可能会产生影响程序结果的副作用,如更改变量值。 若要防止意外计算所导致的副作用,可以在**“常规”->“调试”->“选项”**对话框中关闭属性计算。
字符串
在 Visual Basic 中,可以对字符串使用 Length 运算符:
mystring.Length
- 或 -
"hello world".Length
TypeOf 运算符
在 Visual Basic 中,可以在调试器窗口中使用 TypeOf 运算符:
TypeOf expression Is type
例如,
TypeOf Me Is Integer
显示值 false。
如果使用 TypeOf,它必须是使用 Is 的表达式的一部分。 如果使用 TypeOf 而未使用 Is,将收到以下错误消息:
Is required
不受支持的关键字
调试器窗口表达式中不支持下列 Visual Basic 关键字:
AddressOf
End
Error
Exit
Goto
On Error
Return
Resume
Select/Case
Stop
SyncLock
Throw
Try/Catch/Finally
With
此外,不支持任何命名空间或模块级的关键字(如 End Sub 或 Module)。
变量声明
不能在调试器窗口中声明显式的新变量。
但是,可以在**“即时”**窗口中向隐式变量赋值。 这些隐式变量的范围限于调试器,无法在调试器外进行访问。 例如,语句 o = 5 将隐式创建一个新变量 o,并向其赋值 5。 这样的隐式变量为 Object 类型,除非调试器可以推导该类型。
WebMethods
不能从调试器窗口调用 WebMethods。