有没有办法在Visual Studio中调试VB.NET With子句?

时间:2013-03-06 19:56:55

标签: vb.net visual-studio-2010 visual-studio-debugging with-statement

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

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方法何时会派上用场。

BTW,名为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子句彼此嵌套时,问题的大小会增加。

2 个答案:

答案 0 :(得分:3)

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

您已经通过命名变量找到了正确的解决方法。从那里调试很简单,只需将鼠标悬停在变量名称上,而不是字段名称上。当然,在所有其他调试器窗口中运行良好,特别是Autos窗口将会生动。并且毫不犹豫地放弃With语句,而只是完整地编写语句,IntelliSense帮助批次使这不仅仅是一件苦差事。

答案 1 :(得分:0)

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