Podczas przechwytywania ogólnego wyjątku, jak mogę określić oryginalny typ wyjątku?

Podczas przechwytywania wyjątku w .NET można mieć tyle bloków wyjątków specyficznych dla typu, ile potrzeba. Ale zazwyczaj staram się mieć przynajmniej jeden „ogólny” blok wyjątków. Ale czy istnieje sposób na zgłoszenie typu „prawdziwego” wyjątku, który został przechwycony przez ogólny program obsługi wyjątków, być może przy użyciu odbicia?

Na przykład, jeśli mam

Catch ex As System.ServiceModel.FaultException(Of InvalidUser)
     ProcessModuleLoadException(Me, ex)
Catch ex As System.ServiceModel.FaultException(Of SQLExceptions)
     ProcessModuleLoadException(Me, ex)
Catch ex As System.ServiceModel.FaultException(Of DataNullReference)
     ProcessModuleLoadException(Me, ex)
Catch ex As System.ServiceModel.FaultException
     ProcessModuleLoadException(Me, ex)
Catch ex As Exception
     ProcessModuleLoadException(Me, ex)

(Rozbiłem je na debugowanie, mimo że robię to samo z każdym wyjątkiem).

W skrócie, w „Catch ex As System.ServiceModel.FaultException” chcę zbadać „ex” i uzyskać podstawowy „prawdziwy” typ wyjątku, albo jako typ (głównie do debugowania, dzięki czemu mogę dodać kolejny blok catch) lub jako ciąg (do logowania).

Ale wewnątrz bloku Catch „ex” został już rzutowany na jego klasę nadrzędną, więc wszelkie oryginalne właściwości i informacje o oryginalnym wyjątku wydają się być utracone.

Propozycje?

questionAnswers(4)

yourAnswerToTheQuestion