Back to notes -- Keyboard shortcut: 'u'        next -- Keyboard shortcut: 'n'  Slide program -- Keyboard shortcut: 't'    Raising and throwing a new exception.Lecture 9 - slide 26 : 30
Program 1
using System;

class ExceptionDemo{

  public static void Main(){                          
    int[] table = new int[6]{10,11,12,13,14,15};
    int idx = 6;
    M(table, idx);
  }

  public static void M(int[] table, int idx){         
    Console.WriteLine("M(table,{0})", idx);
    N(table,idx);
  }

  public static void N(int[] table, int idx){         
    Console.WriteLine("N(table,{0})", idx);           
    try{
      P(table,idx);
    }
    catch (IndexOutOfRangeException e){                               
      // Will not/can no handle here. Raise new exception.            
      throw new IndexOutOfRangeException("Index out of range");       
    }                                                                 
  }

  public static void P(int[] table, int idx){
    Console.WriteLine("P(table,{0})", idx);
    Console.WriteLine("Accessing element {0}: {1}", 
                       idx, table[idx]);                        
  }
}
 
 
 
 
Main calls M, ...
 
 
 
 
 
M calls N, ...
 
 
 
 
N calls P, in which the exception
occurs.
 
 
 
In the handler we throw a new and 
and fresh exception. 
From the outside, the exception appears
to come from N, not P.
 
 
 
 
 
The problem is here.