C # equivalente a Catch di VB.NET ... Quando
-
05-07-2019 - |
Domanda
In VB.NET spesso Cattura & # 8230; Quando
:
Try
…
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
…
End Try
Esiste un C # equivalente a Catch & # 8230; Quando
?
Non voglio ricorrere all'uso di un'istruzione if
all'interno di un catch
se possibile.
Soluzione
Questa funzionalità è stata annunciata per C # 6. Ora è possibile scrivere
try { … }
catch (MyException e) when (myfilter(e))
{
…
}
Puoi scaricare l'anteprima di Visual Studio 2015 ora per dare un'occhiata o attendere l'uscita ufficiale.
Altri suggerimenti
Non esiste un equivalente a Cattura & # 8230; Quando
in C #. Dovrai davvero ricorrere a un'istruzione if
all'interno del tuo catch
, quindi ripetere la ricerca se la tua condizione non è soddisfatta:
try
{
…
}
catch (ArgumentNullException e)
{
if ("SAMPLES" == e.ParamName.ToUpper())
{
… // handle exception
}
else
{
throw; // condition not fulfilled, let someone else handle the exception
}
}
Ciò non ricrea la stessa semantica dell'espressione VB Catch When. C'è una differenza chiave. Il VB Quando viene eseguita l'espressione prima che si verifichi lo svolgersi dello stack. Se dovessi esaminare la pila nel punto di quando filtro, vedresti effettivamente il frame in cui è stata generata l'eccezione.
Avere un if nel blocco catch è diverso perché il blocco catch viene eseguito dopo che lo stack è stato svolto. Ciò è particolarmente importante quando si tratta di segnalare errori. Nello scenario VB hai la possibilità di bloccarsi con una traccia dello stack incluso l'errore. Non è possibile ottenere quel comportamento in C #.
EDIT:
Ha scritto un post di blog dettagliato sull'argomento.