VB.NET-如何在即时窗口中获取With语句使用的实例

时间:2020-03-06 14:28:07  来源:igfitidea点击:

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的工作方式,存在哪些替代方法,编译器做什么,等等。我只想知道这是否可行。

解决方案

在一行上定义变量然后在下一个with语句中使用变量有什么问题?我意识到它使变量的有效期更长,但这令人震惊吗?

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

多出两行不会杀死我们=)

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

在第一种情况(示例)中,我们将以任何一种方式创建变量,编译器将创建我们不允许真正访问的隐式变量,在第二种情况(Oli的另一种答案)中,我们将创建显式创建变量。

如果我们显式创建它,则可以在立即窗口中使用它,也可以在使用它时显式销毁它(我想是内存意识强的人之一!),而不是将这些清理细节留给魔术过程。我认为没有任何方法可以在即时窗口中获取隐式变量。 (而且我也不相信魔术过程。因此,我从不使用多点符号或者隐式变量)

答案是,简单的答案是"否"。

但这不是另一种方法:使用"使用"代替声明然后清除变量。

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

然后,我们可以在即时窗口中使用fc,而不必记住编写一个

fc=nothing

线。

只是更多的想法;)

我希望确实没有办法解决,因为简单的答案是"不",而且我也还没有找到办法。无论哪种方式,到目前为止,没有任何东西真正有一个"不"的理由,只是没有人拥有=)考虑到经典的" with"是=,这只是我们认为vb调试器团队会采用的那些东西之一)

无论如何,我了解所有有关uses和Idisposable的知识,我知道如何修复代码,正如某些人所说的那样,但是我可能并不总是想要这样做。

至于使用,我不喜欢在我的课程上实现IDisposable只是为了赚一点钱。

我们真正需要的是" With var = New FancyClass()",但这可能会造成混淆!