2008-09-19 117 views
1

VB.NET有一个非常方便的“与”语句使用with语句的情况下,但它也可以让你使用它的一位不愿透露姓名的变量,就像这样:VB.NET - 如何获得在即时窗口

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如何工作,有什么替代方案,编译器做什么等等。我只是想知道这是否可能。

回答

1

答案如下,简单的答案是“否”。

但是,不是另一种方式来做到这一点:而不是声明,然后清理变量是使用“使用”。

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

然后你就可以在即时窗口中使用FC和不必记得写

fc=nothing 

线。

只是一些关于它更多的想法;)

1

在一行上定义一个变量并在下一个语句中使用它会出现什么问题?我意识到它使变量活得更长,但是所以令人震惊?

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

两个额外的线路不会杀了你=)

编辑:如果你只是寻找一个是/否,我不得不说:号

+0

谢谢,但我其实需要一个问题的答案。我知道如何声明变量,以及从编译器的角度来看,具体如何使用with语句功能。 – 2008-09-20 07:18:24

+0

已修改。不,没有语法可以抓住“。”在其自己的。 – Oli 2008-09-21 11:38:19

0

你创造一个变量 - 在第一种情况下(你的例子),编译器正在创建一个你不被允许的隐式变量,而在第二种情况下(Oli的另一个答案),你将创建显式变量。

如果你明确地创建它,你可以在直接窗口中使用它,并且当你完成它的时候你可以明确地销毁它(我是一个有记忆意识的,我猜!),而不是离开那些清理魔法过程的细节。我不认为有任何方法可以在即时窗口中获得隐式变量。 (并且我也不相信神奇的过程,因为这个原因,我从不使用多点记号或隐式变量)

1

我希望是不是真的有一种方式来获得它,因为简单的答案是“不”,我还没有找到一种方法尚未要么。无论哪种方式,迄今为止没有任何说法真的有一个理由为“不”,只是没有人有=)这只是你认为vb调试团队将投入的那些东西之一,考虑经典“with”是如何=)

不管怎样,我都知道usings和IDisposable的,我知道如何修复的代码,因为有些人会称呼它,但我可能不会总是希望。

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

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