5

有时您并不真正关心变量的名称,因为它不会超出您的子范围。事实上,指定名称会添加额外的代码行。现在您还可以处理这个名称,这可能会增加潜在的重构工作(如果您决定稍后重命名它)。看看下面的代码:

Dim fileInfo As New FileInfo("filename.txt")
With New FileSystemWatcher
  .Path = fileInfo.DirectoryName
  .Filter = fileInfo.Name
  .EnableRaisingEvents = True
  AddHandler .Changed, AddressOf OnChanged
End With

它是一个完全有效的 VB.NET 结构,看起来整洁干净。但是,当涉及到调试时,假设您在子句中放置了一个断点With,则没有选项可以抓住它.Path来确保它被正确设置。

我在这里遗漏了什么,还是 Visual Studio 真的没有为语句中的.Property语法提供调试With?我用的是2010。

显然,在上面的代码中没有太多需要调试的地方,但是可以有很多例子说明这种无名 With的方法何时会派上用场。

顺便说一句,命名With子句有同样的问题,即如果我要写:

Dim fsw As New FileSystemWatcher
With fsw
  .Path = fileInfo.DirectoryName
  .Filter = fileInfo.Name
  .EnableRaisingEvents = True
  AddHandler .Changed, AddressOf OnChanged
End With

我仍然无法提取 的值.Path,必须始终为其添加前缀fsw

当您将With子句相互嵌套时,问题就会越来越大。

4

2 回答 2

3

带有未命名变量的 With 语句对于调试器来说是一个巨大的挑战,没有解决方法。像“fsw”这样的小型命名辅助变量没有任何问题,它无论如何都存在,由编译器自动生成。这不是无名的,只是无法形容的。像 一样VB$t_ref$L0),调试器不会让您输入它,因为它使用在 VB.NET 标识符名称中无效的字符。这是有意的,它确保它永远不会与您使用的名称发生冲突。这也可以防止它出现在“自动”窗口中。

您已经通过命名变量找到了正确的解决方法。从那里进行调试很简单,只需将鼠标悬停在变量名称上,而不是字段名称上。当然,在所有其他调试器窗口中都运行良好,尤其是 Autos 窗口将焕发生机。并且不要犹豫放弃 With 语句,而只支持完整地编写语句,IntelliSense 有助于使这不那么繁琐

于 2013-03-07T12:10:44.317 回答
0

一个选项是将这些变量添加到监视列表中,并从监视窗口查看值。

于 2013-03-07T09:51:35.617 回答