/// <summary> /// Exception Filter Usage /// </summary> private void ExceptionFilterUsage() { Console.WriteLine("=> Exception Filter Usage: "); MultiExceptionCar myCar = new MultiExceptionCar("Rusty", 90); myCar.CrankTunes(true); try { // Trip Arg out of range exception. myCar.Accelerate(90); } catch (SerializedCarIsDeadException e) when(e.ErrorTimeStamp.DayOfWeek != DayOfWeek.Friday) { // This new line will only print if the when clause eveluates to true Console.WriteLine("Catching car is dead"); Console.WriteLine(e.Message); } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); } catch { throw; } Console.WriteLine(); }
/// <summary> /// Multi Exception Handling Usage /// </summary> private void MultiExceptionHandlingUsage() { Console.WriteLine("=> Multi Exception Handling Usage: "); MultiExceptionCar myCar = new MultiExceptionCar("Rusty", 90); try { // Trip Arg out of range exception. myCar.Accelerate(-10); } catch (SerializedCarIsDeadException e) { Console.WriteLine(e.Message); } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); } catch { throw; } Console.WriteLine(); }
/// <summary> /// Finally Block Usage /// </summary> private void FinallyBlockUsage() { Console.WriteLine("=> Finally Block Usage: "); MultiExceptionCar myCar = new MultiExceptionCar("Rusty", 90); myCar.CrankTunes(true); try { // Trip Arg out of range exception. myCar.Accelerate(-10); } catch (SerializedCarIsDeadException e) { Console.WriteLine(e.Message); } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); } catch { throw; } finally { // This will always occur. // Whether Exception occurs or not. myCar.CrankTunes(false); } Console.WriteLine(); }
/// <summary> /// General Catch Usage /// </summary> private void GeneralCatchStatementsUsage() { Console.WriteLine("=> General Catch Usage: "); MultiExceptionCar myCar = new MultiExceptionCar("Rusty", 90); try { // Trip Arg out of range exception. myCar.Accelerate(-10); } catch (SerializedCarIsDeadException e) { Console.WriteLine(e.Message); } Console.WriteLine(); }
/// <summary> /// Inner Exception Usage /// </summary> private void InnerExceptionUsage() { Console.WriteLine("=> Inner Exception Usage: "); MultiExceptionCar myCar = new MultiExceptionCar("Rusty", 90); try { myCar.Accelerate(90); } catch (SerializedCarIsDeadException e) { try { FileStream fs = File .OpenWrite(@"D:\workspace\github\cn.org.aris\csharp\study\ProCSharp\CSharpConstructsPartOne\chap7\multiexceptionhandling\carErrors.txt"); byte[] buffer = Encoding.UTF8.GetBytes(e.Message); fs.Write(buffer, 0, buffer.Length); fs.Close(); } catch (Exception e2) { // Throw an exception that records the new exception, // as well as the message of the first exception. throw new SerializedCarIsDeadException(e.Message, e2); } } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); } catch { throw; } Console.WriteLine(); }