Stiamo studiando un modello di codifica in C# in cui vorremmo usare una clausola "using" con una classe speciale, il cui metodo Dispose()
fa cose diverse a seconda che il corpo "using" sia stato chiuso normalmente o con un'eccezione .Come determinare se viene gestita un'eccezione .NET?
Per quanto mi riguarda, il CLR tiene traccia dell'eccezione corrente gestita fino a quando non viene utilizzata da un gestore "catch". Tuttavia non è del tutto chiaro se queste informazioni sono esposte in alcun modo per il codice di accesso. Sai se lo è, e se sì, come accedervi?
Ad esempio:
using (var x = new MyObject())
{
x.DoSomething();
x.DoMoreThings();
}
class MyObject : IDisposable
{
public void Dispose()
{
if (ExceptionIsBeingHandled)
Rollback();
else
Commit();
}
}
Questo sembra quasi System.Transactions.TransactionScope
, tranne che il successo/insuccesso non è determinato da una chiamata a x.Complete()
, ma piuttosto sulla base se il corpo using
è stata chiusa normalmente.
Penso che devi chiederti perché stai cercando di farlo. Il pattern Dispose() non è inteso per implementare la logica di controllo elevando le eccezioni. –
È sempre un buon punto mettere in discussione l'intera idea. Apprezzo che questo non è il modo in cui "usare" è destinato a essere usato. Apprezzo che possa portare a un codice errato. Sono ancora interessato a una risposta :) –
Perché questa domanda è stata downvoted? – Olli