Mehrere Exceptions in einem catch block handeln

MD1978

Erfahrenes Mitglied
Hallo,
wie kann ich folgendes machen:

Code:
 try {
 ...
 }
 catch (Exception1 e)
 catch (Exception2 e)
 {
    // handle Exceptions
 }

d.h. ich will mehre Exceptions auffangen, aber alle gleich behandeln.


Wie mache ich das am geschicktesten?


MD
 
Zwar sehr unsauber, aber:
Code:
try {
 ..
} catch (Exception ex) {
 ..
}
Damit fangst alle aufkommenden Exceptions ab. Um genauere Informationen zu erhalten, musst du dabei in der InnerException nachsehen.
 
Ich will nicht alle Exceptions auffangen, sondern nur 2 oder 3 und diese auf die selbe Art behandeln.
geht das nicht?
 
Klar geht das, einfach im Catch Block ne IF Anweisung schreiben, und dein ex abfangen, dann kannst du genau sagen was abgefangen werden soll, und was nicht ;)

Gruss

MFC OpenGL
 
Catch... If ... ? Autsch
Code:
try
{
  ... 
}
catch (FileNotFoundException ex)
{
  ...
}
catch (NullArgumentException ex)
{
  ...
}
catch (Exception ex)
{
 ....
}
Damit werden 2 bestimmte Exceptions abgefangen und alle anderen im letzen Catch-Block.
 
Hallo!

Es besteht ja auch die Möglichkeit Exceptions zu schachteln... du könntest alle Exceptions die mit Datenzugriff haben beispielsweise in einer speziellen DataAccessException kapseln. Innerhalb der Behandlungsroutine für die DataAccessException knüpfst du dir dann die nested Exceptions vor...

Edit: Das ist natürlich nur ein Beispiel... wenn man sowas macht sollte man immer die entsprechenden Exceptions aus dem Framework verwenden, bevor man überhaupt in betracht zieht für solch technische Belange eigene Exception Hierarchien hochzuziehen.

Code:
   using System;
   
   namespace De.Tutorials.ExceptionExamples
   {
   	/// <summary>
   	/// Zusammendfassende Beschreibung für Class1.
   	/// </summary>
   	class ExceptionExample
   	{
   		/// <summary>
   		/// Der Haupteinstiegspunkt für die Anwendung.
   		/// </summary>
   		[STAThread]
   		static void Main(string[] args)
   		{
   			try
   			{
 				SomeErrorProneDatabaseInteraction();
   			}
   			catch(DataAccessException dae)
   			{
   				//Handle the Exception...
 				Console.WriteLine(dae.ToString());
   			}
   
   			Console.ReadLine();
   
   		}
   
   		static void SomeErrorProneDatabaseInteraction() 
   		{
   			if(new Random().Next(3) % 2 == 0)
   			{
 			 	throw new DataAccessException("Severe DataAccessFailure", new System.Data.DataException("database puked because connection pool was full",new SystemException("help I need somebody heeeeeeelp")));
   			}
   			else 
   			{ 
 			 	throw new DataAccessException("Informal database indisposedness",new System.Data.ConstraintException("you inserted an invalid entry... you bastard!"));
   			}
   		}
   	}
   
   	class DataAccessException : Exception
   	{
 		public DataAccessException(String message, Exception exception) : base(message, exception)
   		{
   			
   		}
   	}
   }

Gruss Tom
 
Ich möchte es so wie im Beispiel vom Norbert Eder machen, aber das bei allen Exceptions dieselbe Behandlung erfolgt. D.h. es soll einfach im Code ersichtlich sein, welche möglichen Exceptions auftreten können, aber alle gleich behandelt werden.
 
Dann bau dir eine Methode, die das Handling macht bzw. die Auswertung des Fehlers. Und diese Methode rufst du dann jeweils auf. Oder du behandelst überhaupt nur Exception und gibst diese dann an eine Methode weiter, die dann die InnerExceptions behandelt und auswertet.
 

Neue Beiträge

Zurück