According to the design guideline the catching exception should start from more specification exception to System.Exception.
like :
try
{
}
catch(IOException IOEx)
{
}
catch(ArrayIndexOutOfRangeException AIE)
{
}
.....
catch(Exception ex)
{
}
I heard that CLR tracks the stack to trace the exception one by one to find the matching one(if an error occur). As stack is "Last in first out" in nature won't CLR look in reverse order ? ( i.e Exception .. ArrayIndexOutOfRangeException .. IOException)