In Python, c'è questo utile codice di gestione delle eccezioni:C#: Equivalente del try pitone/catch/altro blocco
try:
# Code that could raise an exception
except Exception:
# Exception handling
else:
# Code to execute if the try block DID NOT fail
Penso che sia utile essere in grado di separare il codice che poteva aumento e eccezione dal tuo codice normale. In Python, questo era possibile come mostrato sopra, tuttavia non riesco a trovare nulla di simile in C#.
Supponendo che la funzione o una come non esista, è prassi normale inserire il codice normale nel blocco try
o dopo il blocco catch
?
Il motivo che mi chiedo è perché ho il seguente codice:
if (!IsReadOnly)
{
T newobj;
try
{
newobj = DataPortal.Update<T>(this);
List<string> keys = new List<string>(BasicProperties.Keys);
foreach (string key in keys)
{
BasicProperties[key] = newobj.BasicProperties[key];
}
}
catch (DataPortalException)
{
// TODO: Implement DataPortal.Update<T>() recovery mechanism
}
}
che richiede il codice normale essere nel blocco try perché altrimenti se un'eccezione è stata sollevata e successivamente gestito, newobj
sarebbe assegnato, ma è abbastanza innaturale avere questo codice nel blocco try che non è correlato allo DataPortalException
. Cosa fare?
Grazie
ho sempre odiato usando blocchi try di cattura a causa di questo. Non c'è modo di separare il codice di break-off e non ha infranto il codice. –
Votazione per chiudere come duplicato esatto: http://stackoverflow.com/questions/1177438/c-try-catch-else – ChristopheD
Questo potrebbe essere un duplicato, ma tale domanda non ha mai ricevuto risposta sufficiente. Dopo aver letto le risposte, mi piace il concetto di Daniel Newby. –