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?
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.