Search code examples
c#catch-block

C# catch(DataException) - no variable defined


static void Main(string[] args)
{
    try
    {
        Console.WriteLine("No Error");
    }
    catch (DataException) /*why no compilation error in this line?*/
    {
        Console.WriteLine("Error....");
    }
    Console.ReadKey();
}

The code is compiling without any error. I do not understand why the first line of the catch block is not giving any compilation error -

catch (DataException)

DataException parameter of the catch block is a class, and it should have a variable next to it such as -

catch (DataException d)

Can someone explain the above behavior?


Solution

  • In section 8.10 of the C# 5.0 spec, you'll find the syntax definition for try/catch (apologies for the formatting):

    catch-clauses:
        specific-catch-clauses       general-catch-clauseopt
        specific-catch-clausesopt   general-catch-clause
    specific-catch-clauses:
        specific-catch-clause
        specific-catch-clauses    specific-catch-clause
    specific-catch-clause:
        catch    (    class-type    identifieropt    )    block
    general-catch-clause:
        catch    block

    So you can see that catch { }, catch (Exception) { } and catch (Exception ex) { } are all valid according to the specification.

    If you don't specify the optional identifier in the catch block, then you're not able to access any exception details - but sometimes you don't need to, so it's good to not declare a variable you don't intend to access.