有时您并不真正关心变量的名称,因为它不会超出子程序的范围。事实上,指定名称会增加一行额外的代码。而且现在您要处理这个名称,这可能会增加潜在的重构工作量(如果以后决定对其进行重命名)。请查看下面的代码:
这是VB.NET中完全有效的构造,看起来简洁明了。然而,在调试时,假设您在
我是否遗漏了什么或者Visual Studio真的没有提供
显然,以上代码没有太多需要调试的内容,但是有很多例子可以说明这种无名
顺便说一下,命名的
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真的没有提供
With
语句内.Property
语法的调试功能?我使用的是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
子句中的层数增加,问题变得越来越严重。
nest With clauses
翻译为:嵌套的 WITH 子句。请考虑孩子们的感受:(此句为表情符号,无法翻译) - asawyer?.Path
,你会得到Leading '.' or '!' can only appear inside a 'With' statement.
。似乎没有办法使用匿名对象,特别是在命名的With
子句中,你当然可以固定源代码fsw.Path
。 - djv