VB.NET-如何在即时窗口中获取With语句使用的实例
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()",但这可能会造成混淆!