Xử lý ngoại lệ trong C# (Bài 8)

Xử lý ngoại lệ trong c# là xử lý cho một vấn đề phát sinh trong quá trình thực hiện chương trình, như vấn đề phát sinh khi đọc một file không tồn tại, ….Xử lý ngoại lệ trong C# được xây dựng trên bốn từ khoá try, catch, finally và throw.

Xử lý ngoại lệ trong c# – Cú pháp

try
{
   // Câu lệnh có thể phát sinh lỗi thực thi
}
catch(Exception_Class object)
{
   // Xử lý ngoại lệ
}
finally
{
   // statements to be executed
}

Bảng bên dưới mô tả một số Exception class thường gặp

Exception class Mô tả
IOException Xử lý các lỗi nhập xuất file
IndexOutOfRangeException Xử lý các lỗi phát sinh khi truy cập vượt chỉ số mảng
NullReferenceException Xử lý các lỗi phát sinh khi sử dụng một object chưa được tạo
InvalidCastException Xử lý lỗi phát sinh khi chuyển đổi sai kiểu dữ liệu
Exception Ngoại lệ tổng quát

Xử lý ngoại lệ trong c# – Ví dụ

Ví dụ sau được sử dụng try…catch để xử lý lỗi phát sinh khi người dùng nhập sai kiểu dữ liệu cho biến kiểu số.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication.lesson08
{
 class Numbers
 {
  static void Main(string[] args)
  {
   int n = 0;
   bool isError;
   do
   {
    isError = false;
    try
    {
     Console.Write("Enter your number ");
     n = Convert.ToInt32(Console.ReadLine());
    }
    catch (Exception e)
    {
      Console.WriteLine("Invalid number. Please try again!");
      isError = true;
    }
   } while (isError);
   Console.Write("Your number is {0}", n);
   Console.ReadLine();
  }
 }
}

Xử lý ngoại lệ trong c# – Ngoại lệ tự định nghĩa

Lập trình viên có thể tự định nghĩa một ngoại lệ cho chính mình thay vì sử dụng những ngoại lệ có sẵn bằng cách kế thừa lớp Exception. Bên dưới là một ví vụ giải thích cách tạo một ngoại lệ.

Bước 1: Tạo một lớp exception

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication.lesson08
{
 class MyException:Exception
 {
   public MyException(string msg): base(msg)
   {
   }
 }
}

Bước 2: Sử dụng exception tự định nghĩa

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication.lesson08
{
 class Scores
 { 
  public static void showScore(float avg)
  {
   if (avg < 0)
   {
    throw (new MyException("Average score must be greater than 0"));
   }
   else
   {
    Console.WriteLine("Average score: {0}", avg);
   }
  }

  static void Main(string[] args)
  {
   try
   {
    // Ok
    showScore(7.8F);
    // Exception
    showScore(-10.0F);
   }
   catch (MyException me)
   {
    Console.Write("{0}", me.Message);
   }
   Console.ReadLine();
  }
 }
}

Kết quả khi chạy chương trình

xu ly ngoai le trong c# 1

Xử lý ngoại lệ trong c# – Bài tập thực hành

Câu 1: Tạo namespace tên Library và BorrowBook

Câu 2: Tạo lớp Student thuộc Library. Lớp Student có các thuộc tính như sau: studentID, studentName, age, gender và city có phạm vi truy cập là private. Trong lớp này có các phương thức sau:

Phương thức nhập chi tiết các thông tin cho Student. Trong phương thức này kiểm tra giá trị nhập vào như sau:

  • studentID
  • studentName phải có độ dài từ 6-40 ký tự
  • age>=18 (chỉ được phép nhập số)
  • gender kiểu string và chỉ nhận 1 trong 2 giá trị Nam hoặc Nữ. Ngoài 2 giá trị trên, bắt người dùng phải nhập lại.
  • city phải có độ dài từ 4-40 ký tự

Phương thức hiển thị thông tin của Student.

xu ly ngoai le trong c# 2

Câu 3: Xây dưng lớp Book thuộc BorrowBook có các thuộc tính như số lượng sách mượn, loại sách cần mượn, phần trăm theo ngày mượn và số lượng ngày mượn.

Phương thức AcceptDetails nhập chi tiết các thông tin cho Book. Kiểm tra các giá trị nhập vào số lượng sách > 0, số ngày mượn >0 và <31 (chỉ được nhập số).

Loại sách mượn và rate nhập theo menu như sau

xu ly ngoai le trong c# 3

Phương thức CalculateAmount() theo công thức

Số lượng * (rate / 100) * số ngày mượn * 10

Phương thức DisplayDetails() hiển thị chi tiết

xu ly ngoai le trong c# 4

Câu 4: Xây dựng lớp thực thi để thực hiện các chức năng trên

xu ly ngoai le trong c# 5