Ngoại lệ C# - Thử..Catch
Ngoại lệ C#
Khi thực thi mã C#, các lỗi khác nhau có thể xảy ra: lỗi mã hóa do người lập trình thực hiện, lỗi do nhập sai hoặc những lỗi không lường trước được khác.
Khi xảy ra lỗi, C# thường sẽ dừng và tạo thông báo lỗi. Thuật ngữ kỹ thuật cho việc này là: C# sẽ đưa ra một ngoại lệ (ném ra lỗi).
C# thử và bắt
Câu lệnh try
cho phép bạn xác định một khối mã để kiểm tra lỗi trong khi nó đang được thực thi.
Câu lệnh catch
cho phép bạn xác định khối mã sẽ được thực thi nếu xảy ra lỗi trong khối thử.
Các từ khóa try
và catch
đi theo cặp:
Cú pháp
try { // Block of code to try } catch (Exception e) { // Block of code to handle errors }
Hãy xem xét ví dụ sau, trong đó chúng ta tạo một mảng gồm ba số nguyên:
Điều này sẽ tạo ra lỗi vì myNumbers[10] không tồn tại.
int[] myNumbers = {1, 2, 3}; Console.WriteLine(myNumbers[10]); // error!
Thông báo lỗi sẽ giống như thế này:
System.IndexOutOfRangeException: 'Index was outside the bounds of the
array.'
Nếu xảy ra lỗi, chúng ta có thể sử dụng try...catch
để bắt lỗi và thực thi một số mã để xử lý lỗi đó.
Trong ví dụ sau, chúng tôi sử dụng biến bên trong khối bắt ( e
) cùng với thuộc tính Message
tích hợp, tạo ra thông báo mô tả ngoại lệ:
Ví dụ
try { int[] myNumbers = {1, 2, 3}; Console.WriteLine(myNumbers[10]); } catch (Exception e) { Console.WriteLine(e.Message); }
Đầu ra sẽ là:
Index was outside the bounds of the array.
Bạn cũng có thể xuất thông báo lỗi của riêng mình:
Ví dụ
try { int[] myNumbers = {1, 2, 3}; Console.WriteLine(myNumbers[10]); } catch (Exception e) { Console.WriteLine("Something went wrong."); }
Đầu ra sẽ là:
Something went wrong.
Cuối cùng
Câu lệnh finally
cho phép bạn thực thi mã sau try...catch
, bất kể kết quả:
Ví dụ
try { int[] myNumbers = {1, 2, 3}; Console.WriteLine(myNumbers[10]); } catch (Exception e) { Console.WriteLine("Something went wrong."); } finally { Console.WriteLine("The 'try catch' is finished."); }
Đầu ra sẽ là:
Something went wrong.
The 'try catch' is finished.
Từ khóa ném
Câu lệnh throw
cho phép bạn tạo một lỗi tùy chỉnh.
Câu lệnh throw
được sử dụng cùng với một lớp ngoại lệ . Có nhiều lớp ngoại lệ có sẵn trong C#: ArithmeticException
, FileNotFoundException
, IndexOutOfRangeException
, TimeOutException
, v.v.:
Ví dụ
static void checkAge(int age) { if (age < 18) { throw new ArithmeticException("Access denied - You must be at least 18 years old."); } else { Console.WriteLine("Access granted - You are old enough!"); } } static void Main(string[] args) { checkAge(15); }
Thông báo lỗi hiển thị trong chương trình sẽ là:
System.ArithmeticException: 'Access denied - You must be at least 18 years old.'
Nếu age
là 20, bạn sẽ không có ngoại lệ: