VB.NET - Как получить экземпляр, используемый оператором With в непосредственном окне - PullRequest
1 голос
/ 20 сентября 2008

VB.NET имеет очень удобный оператор "with", но он также позволяет использовать его для неназванной переменной, например:

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

Есть ли способ получить «скрытый» экземпляр, чтобы я мог просмотреть его свойства в окне «Немедленное»? Я сомневаюсь, что получу это в окнах наблюдения, так что немедленно все в порядке.

Если вы попытаетесь получить доступ к экземпляру тем же способом (скажем, когда .Execute() выдает исключение) из окна Immediate, вы получите ошибку:

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

Есть ли какая-нибудь хитрость, которую можно использовать, чтобы получить это, или мне нужно преобразовать код в другой стиль? Если бы With функционировал больше как оператор Using (например, "С v = New FancyClass ()"), это не представляло бы проблемы.

Я знаю, как работает With, какие существуют альтернативы, что делает компилятор и т. Д. Я просто хочу знать, возможно ли это.

Ответы [ 4 ]

1 голос
/ 24 сентября 2008

Я надеюсь, что на самом деле нет способа добраться до него, так как простой ответ - «нет», и я еще не нашел способа. В любом случае, до сих пор ничего не сказано, на самом деле есть обоснование для того, чтобы быть «нет», просто этого никто не имеет =) Это всего лишь одна из тех вещей, которые вы полагаете, что команда отладчика vb вставила бы, учитывая, как классически «с» =)

В любом случае, я знаю все об использовании и Idisposable, я знаю, как исправить код, как некоторые его называют, но я не всегда хочу этого.

Что касается использования, я не люблю реализовывать IDisposable на своих классах просто для того, чтобы получить немного сахара.

Что нам действительно нужно, так это «With var = New FancyClass ()», но это может сбить с толку!

1 голос
/ 23 сентября 2008

В ответ на простой вопрос «нет».

Но это не другой способ сделать это: вместо объявления, а затем очистки переменной следует использовать «Использование».

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

Тогда вы можете использовать fc в ближайшем окне и не должны забывать писать

fc=nothing 

линия.

Просто еще несколько мыслей об этом;)

1 голос
/ 20 сентября 2008

Что не так с определением переменной в одной строке и использованием ее в операторе with в следующей? Я понимаю, что она поддерживает переменную дольше, но это так ужасно?

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

Две лишние строки не убьют тебя =)

Редактировать: Если вы просто ищете да / нет, я бы сказал: Нет.

0 голосов
/ 20 сентября 2008

Вы создаете переменную в любом случае - в первом случае (ваш пример) компилятор создает неявную переменную, к которой вы не можете по-настоящему добраться, а во втором случае (другой ответ, Оли) ) вы будете создавать переменную явно.

Если вы создаете это явно, вы можете использовать его в непосредственном окне, и вы можете явно уничтожить его, когда закончите с этим (я думаю, я один из тех, кто заботится о памяти), вместо того, чтобы оставлять их чистыми детали до магических процессов. Я не думаю, что есть какой-либо способ получить неявную переменную в непосредственном окне. (и я тоже не доверяю магическим процессам. По этой причине я никогда не использую многоточечные обозначения или неявные переменные)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...