2009-05-27 9 views

risposta

135

Questo non può essere digitato in Eccezione perché è possibile lanciare oggetti in. Net che non derivano da System.Exception. Questo non è possibile in C# o VB.Net ma è possibile in altri linguaggi CLR. Quindi l'API deve supportare questa possibilità e utilizza l'oggetto type.

Così mentre non dovrebbe mai essere nullo, potrebbe non essere in realtà un System.Exception.

Vedere CLI sezione spec 10.5 (CLS specificamente regola 40) per maggiori dettagli

+3

Grazie Jared Ho aggiunto la tua risposta e un link qui al contenuto della community msdn – Simon

+0

Quindi lanciarlo su Exception in C# non sarà un problema? destra? –

+1

@MubasharAhmad può essere un problema se il tipo non deriva da 'System.Exception'. L'eccezione potrebbe essere il risultato di un linguaggio non conforme alla CLI che decide di lanciare un 'System.Int32'. Le versioni più recenti di CLR lo completeranno automaticamente in "System.Exception" ma questa è un'impostazione che può essere disabilitata – JaredPar

73

In aggiunta a quanto Jared ha già menzionato, si può tranquillamente lanciare a Exception in .NET Framework 2.0 e più alto se RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true) è stata applicata a il tuo assembly (verrà aggiunto automaticamente dai compilatori C# e VB).

Quando questo attributo è stato applicato, le "eccezioni" non esclusive verranno raggruppate in RuntimeWrappedException.

+3

Grazie per l'informazione; Stavo gestendo questo manualmente, vale a dire, avvolto in un RuntimeWrappedException se non è riuscito a trasmettere un'eccezione. – Dennis

Problemi correlati