Domanda

VB.NET ha un " molto utile con " , ma ti consente anche di usarlo su una variabile senza nome, come questa:

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

Esiste un modo per accedere a " nascosto " istanza, quindi posso visualizzare le sue proprietà nella finestra immediata? Dubito che lo ottengo dalle finestre dell'orologio, quindi immediato va bene.

Se si tenta di accedere all'istanza allo stesso modo (ad esempio, quando .Execute () genera un'eccezione) dalla finestra immediata, viene visualizzato un errore:

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

C'è qualche trucco che può essere usato per ottenere questo, o devo convertire il codice in un altro stile? Se With funzionasse più come un'istruzione Using , (ad es. & Quot; With v = New FancyClass () ") ciò non costituirebbe un problema.

So come funziona With , quali alternative esistono, cosa fa il compilatore, ecc. Voglio solo sapere se questo è possibile.

È stato utile?

Soluzione

Come risposta, la risposta semplice è " no " ;.

Ma non è un altro modo per farlo: invece di dichiarare e quindi ripulire la variabile è usare " Usare " ;.

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

Quindi puoi usare fc nella finestra immediata e non devi ricordare di scrivere un

fc=nothing 

Linea.

Ancora qualche pensiero in più;)

Altri suggerimenti

Cosa c'è di sbagliato nel definire una variabile su una riga e usarla in una dichiarazione with sulla successiva? Mi rendo conto che mantiene viva la variabile più a lungo, ma è così spaventoso?

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

Due righe extra non ti uccideranno =)

Modifica: se stai solo cercando un sì / no, dovrei dire: No.

Spero che non ci sia davvero un modo per arrivarci, dato che la risposta semplice è "no" e non ho ancora trovato un modo. Ad ogni modo, nulla di quanto detto finora ha davvero una logica per essere "no", solo che nessuno ha =) È solo una di quelle cose che pensi che il team di debugger vb avrebbe messo in considerazione, considerando quanto il classico "quotato" con " is =)

Ad ogni modo, so tutto sugli usi e Idisposable, so come correggere il codice, come alcuni lo chiamerebbero, ma potrei non sempre volerlo.

Per quanto riguarda l'utilizzo, non mi piace implementare IDisposable sulle mie lezioni solo per guadagnare un po 'di zucchero.

Ciò di cui abbiamo davvero bisogno è un " With var = New FancyClass () " ;, ma ciò potrebbe creare confusione!

Stai creando una variabile in entrambi i casi: nel primo caso (il tuo esempio) il compilatore sta creando una variabile implicita a cui non sei autorizzato a raggiungere, e nel secondo caso (un'altra risposta di Oli ) dovresti creare esplicitamente la variabile.

Se lo crei esplicitamente puoi usarlo nella finestra immediata e puoi distruggerlo esplicitamente quando hai finito (sono uno dei ricordi coscienti, immagino!), invece di lasciarli puliti dettagli sui processi magici. Non penso che ci sia modo di ottenere una variabile implicita nella finestra immediata. (e non mi fido neanche dei processi magici. Non uso mai la notazione a più punti o le variabili implicite per questo motivo)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top