В C#
, как работает блок catch try finally?
Итак, если есть исключение, я знаю, что он перейдет в блок catch и затем перейдет к блоку finally.
Но что, если нет ошибки, блок catch не будет запущен, но тогда блок finally будет запущен?
В C#
, как работает блок catch try finally?
Итак, если есть исключение, я знаю, что он перейдет в блок catch и затем перейдет к блоку finally.
Но что, если нет ошибки, блок catch не будет запущен, но тогда блок finally будет запущен?
Да, блок finally запускается, есть ли исключение или нет.
Try [ tryStatements ] [ Exit Try ] [ Catch [ exception [ As type ] ] [ When expression ] [ catchStatements ] [ Exit Try ] ] [ Catch ... ] [ Finally [ finallyStatements ] ] --RUN ALWAYS End Try
Смотрите: http://msdn.microsoft.com/en-us/library/fk6t46tz%28v=vs.80%29.aspx
Да условие finally получает exeucuted, если нет исключения. Пример
try
{
int a = 10;
int b = 20;
int z = a + b;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.WriteLine("Executed");
}
Итак, если предположить, что возникает исключение, то окончательно выполняется.
Общее использование catch и, наконец, вместе - это получение и использование ресурсов в блоке try, рассмотрение исключительных обстоятельств в блоке catch и освобождение ресурсов в блоке finally.
Дополнительные сведения и примеры исключений повторного броска см. в try-catch и Бросание исключений. Для получения дополнительной информации о блоке finally см. try-finally.
public class EHClass
{
void ReadFile(int index)
{
// To run this code, substitute a valid path from your local machine
string path = @"c:\users\public\test.txt";
System.IO.StreamReader file = new System.IO.StreamReader(path);
char[] buffer = new char[10];
try
{
file.ReadBlock(buffer, index, buffer.Length);
}
catch (System.IO.IOException e)
{
Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
}
finally
{
if (file != null)
{
file.Close();
}
}
// Do something with buffer...
}
}
Наконец, блок всегда запускается, несмотря ни на что. просто попробуйте этот метод
public int TryCatchFinally(int a, int b)
{
try
{
int sum = a + b;
if (a > b)
{
throw new Exception();
}
else
{
int rightreturn = 2;
return rightreturn;
}
}
catch (Exception)
{
int ret = 1;
return ret;
}
finally
{
int fin = 5;
}
}
try
{
//Function to Perform
}
catch (Exception e)
{
//You can display what error occured in Try block, with exact technical spec (DivideByZeroException)
throw;
// Displaying error through signal to Machine,
//throw is usefull , if you calling a method with try from derived class.. So the method will directly get the signal
}
finally //Optional
{
//Here You can write any code to be executed after error occured in Try block
Console.WriteLine("Completed");
}