有时您并不真正关心变量的名称,因为它不会超出您的子范围。事实上,指定名称会添加额外的代码行。现在您还可以处理这个名称,这可能会增加潜在的重构工作(如果您决定稍后重命名它)。看看下面的代码:
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
子句相互嵌套时,问题就会越来越大。