Cred ca nu am fost vreodata la vreun interviu la care sa nu primesc o intrebare despre exceptii. Mi se pare si logic sa primesc astfel de intrebari, cu exceptiile te lovesti zi de zi si trebuie sa stii cum functioneaza, ce te intereseaza despre ele si ce sa faci cu ele. Intrebarile de mai jos sunt de bun simt, asa ca trebuie sa stii raspunsurile.
Ce informatii te intereseaza de la o exceptie? Proprietatea Message, StackTrace si InnerException in caz ca are. Proprietatea InnerException este in foarte multe cazuri foarte importanta, intrucat exceptia care ne intereseaza este impachetata in alte exceptii: exceptiile SQL sunt astfel impachetate.
Care este diferenta dintre throw, throw e; si throw new Exception(message,exception) ? Diferenta e la stacktrace: in cazul throw simplu, stacktrace-ul este pastrat, in cazul throw e, stacktrace este de unde a fost apelat throw e. Cand facem throw new Exception(message, exception), exceptia noastra este impachetata intr-o alta exceptia. Astfel, ea devine un inner exception.
static float Divide(int a,int b)
{
return a/b;
}
static void Calculate()
{
try
{
Divide(10,0);
}
catch (DivideByZeroException e)
{
//comment one by one
throw; //stacktrace from Divide
throw e; //stacktrace from here
throw new Exception("",e);
}
}
static void Main(string[] args)
{
try
{
Calculate();
}
catch (DivideByZeroException ex)
{
Console.Error.WriteLine(ex.StackTrace);
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.StackTrace); // In this case, we have innner exception
}
}
try
{
try
{
throw new Exception("Exception try");
}
catch (Exception e)
{
throw new Exception("Exception catch");
}
finally
{
throw new Exception("Exception finally");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}