Csharp/CSharp Tutorial/Language Basics/Exception Throw
Содержание
Creating and throwing an exception object
using System;
class MainClass
{
public static void Main()
{
try
{
Exception myException = new Exception("myException");
myException.HelpLink = "See the Readme.txt file";
myException.Source = "My Program";
throw myException;
}
catch (Exception e)
{
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);
}
}
}
HelpLink = See the Readme.txt file Message = myException Source = My Program StackTrace = at MainClass.Main() TargetSite = Void Main()
Manually throw an exception.
The general form is:
throw exceptOb;
Rethrow an exception
using System;
class MainClass {
public static void Main() {
try {
genException();
}
catch(IndexOutOfRangeException) {
// recatch exception
Console.WriteLine("Fatal error -- " +
"program terminated.");
}
}
public static void genException() {
int[] numer = { 4, 8};
int d = 0;
for(int i=0; i<10; i++) {
try {
Console.WriteLine(numer[i] + " / " +
numer[i] + " is " +
numer[i]/d);
}
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
}
}
}
}
Can"t divide by Zero! Can"t divide by Zero! No matching element found. Fatal error -- program terminated.
Throw Exception from a function
using System;
class MainClass
{
static void AFunction()
{
int Zero = 0;
int j = 22 / Zero;
}
public static void Main()
{
try
{
Console.WriteLine("efore Function");
AFunction();
}
catch (DivideByZeroException e)
{
Console.WriteLine("DivideByZero {0}", e);
}
}
}
efore Function DivideByZero System.DivideByZeroException: Attempted to divide by zero. at MainClass.Main()
Throw Exception in finally statement
using System;
using System.Collections;
public class MainClass
{
static void Main() {
try {
try {
ArrayList list = new ArrayList();
list.Add( 1 );
Console.WriteLine( "Item 10 = {0}", list[10] );
}
finally {
Console.WriteLine( "Cleaning up..." );
throw new Exception( "I like to throw" );
}
}
catch( ArgumentOutOfRangeException ) {
Console.WriteLine( "Oops! Argument out of range!" );
}
catch {
Console.WriteLine( "Done" );
}
}
}
Cleaning up... Done
Wrap exception in another one, adding additional context
using System;
public class MyClass
{
public void DoAverage()
{
try
{
int count = 0;
int average = 10 / count;
}
catch (DivideByZeroException e)
{
throw (new DivideByZeroException(
"Count is zero in DoAverage()", e));
}
}
}
public class MainClass
{
public static void Main()
{
MyClass my = new MyClass();
try
{
my.DoAverage();
}
catch (Exception e)
{
Console.WriteLine("Exception: {0}", e);
}
}
}
Exception: System.DivideByZeroException: Count is zero in DoAverage() ---> System.DivideByZeroExcept ion: Attempted to divide by zero. at MyClass.DoAverage() --- End of inner exception stack trace --- at MyClass.DoAverage() at MainClass.Main()