Neo*_*isk 5 vb.net visual-studio-2010 with-statement visual-studio-debugging
有时,您实际上并不在乎变量的名称,因为它不会超出您的子范围。实际上,指定名称会增加一行代码。同样,您现在也要使用该名称,这可能会增加潜在的重构工作(如果您以后决定重命名)。看下面的代码:
Dim fileInfo As New FileInfo("filename.txt")
With New FileSystemWatcher
.Path = fileInfo.DirectoryName
.Filter = fileInfo.Name
.EnableRaisingEvents = True
AddHandler .Changed, AddressOf OnChanged
End With
Run Code Online (Sandbox Code Playgroud)
这是一个完全有效的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
Run Code Online (Sandbox Code Playgroud)
我仍然无法提取的值.Path,而必须始终以为其前缀fsw。
当您将With子句彼此嵌套时,问题的规模会越来越大。
带有未命名变量的 With 语句对于调试器来说是一个巨大的挑战,没有解决方法。像“fsw”这样的小命名辅助变量没有任何问题,它无论如何都存在,由编译器自动生成。这并非无名,只是难以言表。与 一样VB$t_ref$L0),调试器不会让您输入该字符,因为它使用了 VB.NET 标识符名称中无效的字符。这是故意的,它确保它永远不会与您使用的名称冲突。这也可以防止它显示在“自动”窗口中。
您已经通过命名变量找到了正确的解决方法。从那里进行调试很简单,只需将鼠标悬停在变量名称上,而不是字段名称上即可。当然,在所有其他调试器窗口中都可以很好地工作,特别是“自动”窗口将变得栩栩如生。请毫不犹豫地放弃 With 语句,转而只写完整的语句,IntelliSense 可以帮助您减少繁琐的工作。
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |