بیان try-catch شامل یک بلوک try و یک یا بیش از یک جمله catch که بعد از آن بلوک می آید، مدیریت کننده هایی را برای خطاهای مختلف تعیین می کند. وقتی یک خطا پرتاب (throw) می شود (اتفاق می افتد/خودمان عمدا آن خطا را تولید می کنیم)، زبان عمومی زمان اجرا (CLR - Common Language Runtime) به دنبال بیان catch ی می گردد که آن خطا را مدیریت می کند می گردد. اگر متدی که فعلا" در حال اجرا است چنین بلوک catch ی نداشته باشد، CLR به متدی که این متد فعلی را فراخوانی کرده نگاه می کند و همینطور استک را به سمت بالا بازرسی می کند (تا به بلوک catch مربوطه برسد). اگر هیچ بلوک catch ی پیدا نشد، آنگاه CLR یک پیام خطای-مدیریت-نشده به کاربر نشان می دهد و روند اجرای برنامه را متوقف می کند.
بلوک try حاوی کد محافظت شده است ولی ممکن است خطا برایش اتفاق بیفتد. بلوک به اجرا ادامه می دهد زمانی که خطایی پرتاب شود یا بلوک با موفقیت کامل شود. برای مثال، تلاش زیر برای قالبریزی یک شیئ null ، خطای NullReferenceExeption را برپا می کند:
object o2 = null; try { int i2 = (int)o2; // Error }