C# унаследовал обработку ошибок от С++ и теперь обработка ошибок строиться на основе исключений.
try
{
// код гле возможна ошибка
}
catch (Тип ошибки - переменная )
{
// код обработки ошибки в соответсвии с типом
}
finally
{
// код обработки ошибки в не зависимости от ее типа
}
Смотрим пример:
using System;
class MainClass
{
public static void Main(string[] args)
{
Test();
}
public static void Test()
{
try
{
int x=10;
int y=0;
int z=x/y;
}
catch(ArithmeticException a)
{
Console.WriteLine("An error occurred: '{0}'", a);
Console.WriteLine("Error catch");
}
finally
{
Console.WriteLine("Error finally");
}
}
}
В данном случае будет обработка будет и в catch и в finally.

Обратите внимание на то, что обработка ошибки типизированная. Обрабатывать все ситуации можно если применять в типе исключения базовый класс Exception.
try
{
int x=10;
int y=0;
int z=x/y;
}
//catch(ArithmeticException a)
catch(Exception a)
{
Console.WriteLine("An error occurred: '{0}'", a);
Console.WriteLine("Error catch");
}