C# 中的表达式
更新:2007 年 11 月
本主题适用于:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
速成版 |
![]() |
![]() |
![]() |
![]() |
标准版 |
![]() |
![]() |
![]() |
![]() |
专业团队版 |
![]() |
![]() |
![]() |
![]() |
表格图例:
![]() |
适用 |
![]() |
不适用 |
![]() |
默认情况下隐藏的一条或多条命令。 |
该托管表达式计算器接受大多数用 C# 编写的表达式。下列各节提供特定信息并讨论某些不受支持的表达式类型:
标识符和类型
方法计算
运算符
重载运算符
字符串
强制转换
typeof 和 sizeof 运算符
属性计算
表达式计算器忽略访问修饰符 public、protected、internal 和 private。例如,您可以从“监视”窗口调用 private 方法。由于表达式计算器忽略访问修饰符,因此可以调用预期外的加载。
表达式计算器在隐式的不安全的上下文中执行所有计算,无论所执行的代码是否安全。
表达式计算器还忽略已经检查的块和 /checked 编译器选项。所有表达式都在未检查的上下文中计算。
您可以使用属性自定义那些自定义数据类型的显示。有关更多信息,请参见显示自定义数据类型。
标识符和类型
调试器表达式可以使用在当前范围内可见的任何标识符。例如,如果调试器在 Magh 方法中停止,您可以使用在 Magh 中可见的任何标识符,包括常数、变量名和方法名。
调试器可以正确地显示任何 primitive、enum 或 intrinsic 类型的变量。对于类类型的变量,调试器基于派生程度最大的类型正确显示值。如果具有从类型 Cat 派生的 Lion 类型的对象 leo,则可为类型 Lion 的对象计算 leo.Claws 并获得正确的值。
您可以向任何为左值的左表达式赋新值。这包括基元、类和 System.Object 类型。
方法计算
调试器支持方法的计算,包括重载方法的计算。因此,您可以输入下列任一表达式,调试器将调用重载方法的正确版本:
Time.Set();
Time.Set(atime);
在调试器中计算方法实际上是调用并执行该方法的代码。如果方法有副作用,在调试器窗口中计算该方法将更改程序的状态,这可能产生意外的结果。
在对重载方法设置断点时,断点的位置取决于指定方法的方式。如果指定完整签名(方法名和完整参数列表),调试器将对指定的重载设置一个断点。如果仅指定方法名,调试器的行为将由 Visual Studio 选项设置决定。如果未选中“使用 IntelliSense 验证函数名”复选框,调试器将对该方法名的每个重载设置一个断点。否则,将打开“选择断点”对话框,允许您指定将断点放在哪些重载上。有关更多信息,请参见 如何:设置函数断点。
在此版本的 Visual Studio 中,不支持在调试器中创建新的匿名方法。
运算符
调试器正确地计算大多数内置运算符,包括:
关系运算符和相等运算符:(表达式1 > 表达式2、表达式1 < 表达式2、表达式1 <= 表达式2、表达式1 => 表达式2、表达式1 == 表达式2、表达式1 != 表达式2)。
布尔运算符:(表达式1 && 表达式2、表达式1 || 表达式2、表达式1 ? 表达式2 : 表达式3)。
算术运算符:(表达式1 + 表达式2、表达式1 - 表达式2、表达式1 * 表达式2、表达式1 / 表达式2、表达式1 % 表达式2)。
逻辑运算符:(表达式1 & 表达式2、表达式1 ^ 表达式2、表达式1 | 表达式2)。
移位运算符:(表达式1 >> 表达式2、表达式1 << 表达式2)。
赋值运算符:(lvalue = 表达式2、lvalue *= 表达式2lvalue /= 表达式2、lvalue %= 表达式2、lvalue += 表达式2、lvalue -= 表达式2、lvalue <<= 表达式2、lvalue >>= 表达式2、lvalue &= 表达式2、lvalue ^= 表达式2、lvalue |= 表达式2)。
一元运算符:(+表达式1、- 表达式1、表达式1++、++expr1、表达式1--, --表达式1)。
重载运算符
大多数重载运算符在调试器中有效。
重载中缀运算符 +、-、/、% 和 & 有效:
表达式1 + 表达式2
表达式1表达式2
表达式1 / 表达式2
表达式1 % 表达式2
表达式1 & 表达式2
重载中缀运算符 =、&&、& 和 || 无效:
表达式1 = 表达式2
表达式1 && 表达式2
表达式1 & 表达式2
表达式1 || 表达式2
如果两个操作数都是类变量,重载中缀运算符 << 和 >> 无效:
对象1 <<对象2
对象1 >> 对象2
重载前缀运算符 +、-、++、--、! 和 ~ 有效:
+表达式1
-表达式1
++表达式1
--表达式1
!表达式1
~表达式1
重载后缀运算符 ++ 和 -- 有效:
表达式1++
表达式1--
重载索引器有效:
- 表达式1[表达式2]
字符串
调试器不仅可识别与数组一起使用的索引运算符,还可识别与字符串一起使用的索引运算符。例如,您可以输入:
"hello world"[0]
“监视”窗口将显示正确的值:
'h'
在 C# 中,与本机 C/C++ 不同的是可以在调试器中编辑字符串的值。另外,可以对字符串使用 Length 运算符:
mystring.Length
- 或 -
"hello world".Length
在 C# 中,可以连接字符串:
"hello" + "world"
强制转换
简单强制转换表达式在调试器中有效:
(A)x
涉及指针的强制转换在调试器中无效。
typeof 和 sizeof 运算符
调试器支持 typeof 和 sizeof 运算符,方法是将其转换为等效的 .NET Framework 函数。
typeof ( 表达式 )
被转换为:
System.Type.GetType( 表达式 )
调试器随后计算该已转换表达式。
调试器支持 sizeof 运算符。
属性计算
调试器可以在任何变量窗口中计算属性。不过,在调试器中计算属性可能会有副作用,从而产生意外的、不想要的结果。若要防止意外计算所产生的副作用,可以在“选项”对话框中关闭属性计算。
WebMethods
不能从调试器窗口调用 WebMethods。