2009-11-18 9 views
14

Qual è l'equivalente di questo in IronPython? E 'solo un blocco try-finally?Qual è l'equivalente del blocco C# "using" in IronPython?

using (var something = new ClassThatImplementsIDisposable()) 
{ 
    // stuff happens here 
} 
+0

Aggiungiamo qualche autorità a questa discussione: http://lists.ironpython.com/ pipermail/users-ironpython.com/2008-July/007826.html –

+1

Non vedo nulla di rilevante in questa domanda. –

risposta

25

IronPython supporta l'utilizzo IDisposable con with dichiarazione, in modo da poter scrivere qualcosa del genere:

with ClassThatImplementsIDisposable() as something: 
    pass 
+0

Buona opzione per i propri tipi, ma non funziona per i tipi di framework. –

+0

Qualche ragione particolare per cui non funziona con i tipi di framework? –

+1

Sei sicuro? Ho appena provato con 'StreamWriter' e sembra funzionare come previsto. –

6

IronPython (come dei candidati 2.6 di rilascio) supporta l'istruzione with, che avvolge un oggetto IDisposable in un modo simile ad usare.

+0

Solo curioso: perché i downvotes? Per quanto ne so, questo è vero: Python, come lingua, non include questo nella lingua. –

+2

-1 Python include questo, è l'istruzione 'with'. – Javier

+0

@Javier Badi: ripetilo dopo aver provato ad usarlo. – Teddy

0

il blocco utilizzando è infatti il ​​seguente sotto il cofano:

try { 
    (do something unmanaged here) 
} 
finally { 
    unmanagedObject.Dispose(); 
} 

Spero che questo ti aiuta a capire la logica dietro l'istruzione using.

4

With statement. Per esempio:

with open("/temp/abc") as f: 
    lines = f.readlines() 
+0

Questo non supporta IDisposable fuori dalla scatola. Funziona con tipi python con una routine __exit__ specificata. –