Csharp/C Sharp/Language Basics/Exception Throw
Содержание
- 1 Demonstrates rethrowing an exception from a method
- 2 Exception throw and catch
- 3 Exception throw and catch 2
- 4 Exception throws
- 5 illustrates creating and throwing an exception object
- 6 Intentionally throws an error to demonstrate Just-In-Time debugging
- 7 Let the C# runtime system handle the error
- 8 Manually throw an exception
- 9 Rethrow an exception
- 10 Throwing Your Own Exceptions
Demonstrates rethrowing an exception from a method
<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794
- /
// Rethrow.cs -- Demonstrates rethrowing an exception from a method. // // Compile this program with the following command line: // C:>csc Rethrow.cs // namespace nsRethrow {
using System; using System.IO; public class Rethrow { static public void Main () { while (true) { Console.Write ("Please enter a file name (return to exit): "); string FileName = Console.ReadLine (); if (FileName.Length == 0) break; try { ReadFile (FileName); break; } catch (IOException e) { if (e is FileNotFoundException) Console.WriteLine ("The file " + FileName + " was not found"); } catch (Exception e) { Console.WriteLine (e.Message + "\n"); break; } } } static public void ReadFile (string FileName) { FileStream strm; StreamReader reader; try { strm = new FileStream (FileName, FileMode.Open); reader = new StreamReader (strm); string str = reader.ReadToEnd (); Console.WriteLine (str); } catch (IOException e) { // If file not found, go back and get another name if (e is FileNotFoundException) throw (e); // Code here to handle other IOException classes Console.WriteLine (e.Message); throw (new IOException()); } } }
}
</source>
Exception throw and catch
<source lang="csharp"> /* Learning C# by Jesse Liberty Publisher: O"Reilly ISBN: 0596003765
- /
using System; namespace ExceptionHandling { public class TesterExceptionHandling2 { static void Main() { Console.WriteLine("Enter Main..."); TesterExceptionHandling2 t = new TesterExceptionHandling2(); t.Run(); Console.WriteLine("Exit Main..."); } public void Run() { Console.WriteLine("Enter Run..."); Func1(); Console.WriteLine("Exit Run..."); }
public void Func1() { Console.WriteLine("Enter Func1..."); Func2(); Console.WriteLine("Exit Func1..."); } public void Func2() { Console.WriteLine("Enter Func2..."); try { Console.WriteLine("Entering try block..."); throw new System.Exception(); Console.WriteLine("Exiting try block..."); } catch { Console.WriteLine("Exception caught and handled!"); } Console.WriteLine("Exit Func2..."); } } } </source>
Exception throw and catch 2
<source lang="csharp"> /* Learning C# by Jesse Liberty Publisher: O"Reilly ISBN: 0596003765
- /
using System; namespace ExceptionHandling { public class TesterExceptionHandling3 { static void Main() { Console.WriteLine("Enter Main..."); TesterExceptionHandling3 t = new TesterExceptionHandling3(); t.Run(); Console.WriteLine("Exit Main..."); } public void Run() { Console.WriteLine("Enter Run..."); Func1(); Console.WriteLine("Exit Run..."); }
public void Func1() { Console.WriteLine("Enter Func1..."); try { Console.WriteLine("Entering try block..."); Func2(); Console.WriteLine("Exiting try block..."); } catch { Console.WriteLine("Exception caught and handled!"); } Console.WriteLine("Exit Func1..."); } public void Func2() { Console.WriteLine("Enter Func2..."); throw new System.Exception(); Console.WriteLine("Exit Func2..."); } } }
</source>
Exception throws
<source lang="csharp"> /* Learning C# by Jesse Liberty Publisher: O"Reilly ISBN: 0596003765
- /
using System; namespace ExceptionHandling { public class TesterExceptionHandling1 { static void Main() { Console.WriteLine("Enter Main..."); TesterExceptionHandling1 t = new TesterExceptionHandling1(); t.Run(); Console.WriteLine("Exit Main..."); } public void Run() { Console.WriteLine("Enter Run..."); Func1(); Console.WriteLine("Exit Run..."); } public void Func1() { Console.WriteLine("Enter Func1..."); Func2(); Console.WriteLine("Exit Func1..."); } public void Func2() { Console.WriteLine("Enter Func2..."); throw new System.Exception(); Console.WriteLine("Exit Func2..."); } } } </source>
illustrates creating and throwing an exception object
<source lang="csharp"> /* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110
- /
/*
Example13_8.cs illustrates creating and throwing an exception object
- /
using System; public class Example13_8 {
public static void Main() { try { // create a new Exception object, passing a string // for the Message property to the constructor Exception myException = new Exception("myException"); // set the HelpLink and Source properties myException.HelpLink = "See the Readme.txt file"; myException.Source = "My Example13_8 Program"; // throw the Exception object throw myException; } catch (Exception e) { // display the exception object"s properties Console.WriteLine("HelpLink = " + e.HelpLink); Console.WriteLine("Message = " + e.Message); Console.WriteLine("Source = " + e.Source); Console.WriteLine("StackTrace = " + e.StackTrace); Console.WriteLine("TargetSite = " + e.TargetSite); } }
}
</source>
Intentionally throws an error to demonstrate Just-In-Time debugging
<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794
- /
// Throw.cs -- Intentionally throws an error to demonstrate // Just-In-Time debugging. // // Compile this program with the following command line: // C:>csc /debug:full Throw.cs // namespace nsThrow {
using System; public class Throw { static public void Main () { Console.WriteLine ("This program intentionally causes an error."); int x = 42; int y = 0; int z = x / y; } }
}
</source>
Let the C# runtime system handle the error
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Let the C# runtime system handle the error.
using System;
public class NotHandled {
public static void Main() { int[] nums = new int[4]; Console.WriteLine("Before exception is generated."); // Generate an index out-of-bounds exception. for(int i=0; i < 10; i++) { nums[i] = i; Console.WriteLine("nums[{0}]: {1}", i, nums[i]); } }
}
</source>
Manually throw an exception
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Manually throw an exception.
using System;
public class ThrowDemo {
public static void Main() { try { Console.WriteLine("Before throw."); throw new DivideByZeroException(); } catch (DivideByZeroException) { // catch the exception Console.WriteLine("Exception caught."); } Console.WriteLine("After try/catch block."); }
}
</source>
Rethrow an exception
<source lang="csharp"> /* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852
- /
// Rethrow an exception.
using System;
class Rethrow {
public static void genException() { // here, numer is longer than denom int[] numer = { 4, 8, 16, 32, 64, 128, 256, 512 }; int[] denom = { 2, 0, 4, 4, 0, 8 }; for(int i=0; i<numer.Length; i++) { try { Console.WriteLine(numer[i] + " / " + denom[i] + " is " + numer[i]/denom[i]); } catch (DivideByZeroException) { // catch the exception Console.WriteLine("Can"t divide by Zero!"); } catch (IndexOutOfRangeException) { // catch the exception Console.WriteLine("No matching element found."); throw; // rethrow the exception } } }
}
public class RethrowDemo {
public static void Main() { try { Rethrow.genException(); } catch(IndexOutOfRangeException) { // recatch exception Console.WriteLine("Fatal error -- " + "program terminated."); } }
}
</source>
Throwing Your Own Exceptions
<source lang="csharp">
using System;
class MyException : ApplicationException {
public MyException() : base("This is my exception message.") { }
}
class MainClass {
public static void Main() { try { MainClass MyObject = new MainClass(); MyObject.ThrowException(); } catch(MyException CaughtException) { Console.WriteLine(CaughtException.Message); } } public void ThrowException() { throw new MyException(); }
}
</source>