1

VB.NET有一个非常方便的“with”语句,但它也允许您在未命名的变量上使用它,如下所示:

With New FancyClass()
    .Level = "SuperSpiffy"
    .Style = Slimming
    .Execute()
End With

有没有办法获得“隐藏”实例,所以我可以在立即窗口中查看它的属性?我怀疑我会在监视窗口中得到它,所以立即可以。

如果您尝试.Execute()从“立即”窗口以相同的方式(例如,引发异常时)访问实例,则会收到错误消息:

? .Style
'With' contexts and statements are not valid in debug windows.

有什么技巧可以用来得到这个,还是我必须将代码转换为另一种风格?如果With功能更像一个Using语句(例如“With v = New FancyClass()”),这不会造成问题。

我知道它With是如何工作的,存在哪些替代方案,编译器做了什么等等。我只想知道这是否可能。

4

4 回答 4

1

在一行上定义一个变量并在下一行的 with 语句中使用它有什么问题?我意识到它可以让变量保持更长时间,但这有那么可怕吗?

Dim x = new SomethingOrOther()
With x
    .DoSomething()
End With
x = Nothing ' for the memory conscious

两条额外的线不会杀死你=)

编辑:如果您只是在寻找是/否,我不得不说:不。

于 2008-09-19T23:03:13.157 回答
1

正如所回答的那样,简单的答案是“不”。

但这不是另一种方法:不是声明然后清理变量而是使用“使用”。

Using fc as new FancyClass()
  With fc    
    .Level = "SuperSpiffy"    
    .Style = Slimming    
    .Execute()
  End With
End Using

然后你可以在即时窗口中使用 fc 而不必记得写一个

fc=nothing 

线。

只是更多的想法;)

于 2008-09-23T15:13:57.837 回答
1

我希望真的没有办法解决它,因为简单的答案是“不”,而且我也没有找到办法。无论哪种方式,到目前为止,没有任何说法真正有理由说“不”,只是没有人有 =)这只是你认为 vb 调试器团队会投入的事情之一,考虑到“与”是多么经典 =)

无论如何,我对 usings 和 Idisposable 了如指掌,我知道如何修复代码,正如有些人所说的那样,但我可能并不总是想要。

至于使用,我不喜欢在我的类上实现 IDisposable 只是为了获得一点糖。

我们真正需要的是“With var = New FancyClass()”,但这可能会让人感到困惑!

于 2008-09-24T07:16:33.920 回答
0

无论哪种方式,您都在创建一个变量-在第一种情况下(您的示例),编译器正在创建一个您不允许真正访问的隐式变量,而在第二种情况下(Oli 的另一个答案)您' d 显式创建变量。

如果你明确地创建它,你可以在即时窗口中使用它,当你完成它时,你可以明确地销毁它(我想我是有记忆意识的人之一!),而不是将那些清理细节留给神奇的过程。我认为没有任何方法可以在即时窗口中获取隐式变量。(而且我也不相信魔法过程。出于这个原因,我从不使用多点符号或隐式变量)

于 2008-09-19T23:09:35.670 回答