托管表达式计算器接受大多数用 Visual Basic 编写的表达式。在**“即时”**窗口中,表达式计算器仅支持单行语句。
下列各节提供特定信息并讨论某些不受支持或部分支持的表达式类型:
Casts
Dynamic Objects
Function Evaluation
Identifiers and Types
Import Aliases
Object Variables Containing Intrinsic Types
Operators
PropertyEvaluation
Strings
TypeOf Operator
Unsupported Keywords
Variable Declarations
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 )。
赋值运算符:(变量1= 表达式2、变量1^= 表达式2、变量1*= 表达式2、变量1/= 表达式2、变量1\= 表达式2、变量1+= 表达式2、变量1-= 表达式2、变量1&= 表达式2)。
比较运算符:(表达式2< 表达式2、表达式2<= 表达式2、表达式1> 表达式2、表达式1>= 表达式2、表达式1= 表达式2、表达式1<> 表达式2)。
串联运算符:(expr1&expr2, expr1+expr2)。
逻辑运算符:(expr1Andexpr2, expr1Orexpr2, expr1XOrexpr2, expr1AndAlsoexpr2, expr1OrElseexpr2, Notexpr1)。
一元运算符:(- 表达式1、Not 表达式1、GetType (类型))。
属性计算
调试器可以在任何变量窗口中计算属性。不过,在调试器中计算属性可能会产生影响程序结果的副作用,如更改变量值。要防止意外计算所导致的副作用,可以在**“常规”->“调试”->“选项”**对话框中关闭属性计算。
字符串
在 Visual Basic 中,可以对字符串使用 Length 运算符:
mystring.Length
- 或 -
"hello world".Length
TypeOf 运算符
在 Visual Basic 中,可以在调试器窗口中使用 TypeOf 运算符:
TypeOf 表达式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。