VieTopik
Thư việnLuyện thiGóc học tậpĐánh dấu
Tải app
  • Thư viện
  • Luyện thi
  • Góc học tập
  • Đánh dấu
C# Core

Bài 4/7

if/else và switch

5 phút đọc

Nội dung bài

  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.switch
  4. 4.Thử ngay
  5. 5.Lỗi hay gặp
  6. 6.Tóm tắt

Đơn trên 500.000đ thì miễn phí ship, khách VIP được giảm giá, mỗi phương thức thanh toán xử lý một kiểu. Chương trình cần chọn làm việc này hay việc kia tuỳ điều kiện. Đó là việc của if và switch.

Khái niệm

🔀 if/else: chạy một khối code khi điều kiện đúng, và khối khác khi điều kiện sai.

🎛️ switch: chọn một nhánh để chạy dựa trên giá trị cụ thể của một biến.

Điều kiện trong if phải là một giá trị bool, thường là kết quả của phép so sánh như total > 500000.

Ví dụ

decimal total = 350000m;
decimal shippingFee;

if (total >= 500000)
{
    shippingFee = 0;
}
else if (total >= 200000)
{
    shippingFee = 15000;
}
else
{
    shippingFee = 30000;
}

Console.WriteLine(shippingFee);   // 15000
  • C# xét từng điều kiện từ trên xuống, gặp điều kiện đúng đầu tiên thì chạy khối đó rồi bỏ qua phần còn lại.
  • else if thêm điều kiện tiếp theo, else là trường hợp còn lại.
  • Code bên trong mỗi nhánh đặt trong cặp ngoặc { }.

switch

Khi so một biến với nhiều giá trị cụ thể, switch gọn hơn một chuỗi else if:

string payment = "card";

switch (payment)
{
    case "cash":
        Console.WriteLine("Thu tiền khi giao");
        break;
    case "card":
        Console.WriteLine("Trừ tiền qua thẻ");
        break;
    default:
        Console.WriteLine("Không hỗ trợ");
        break;
}
  • Mỗi case là một giá trị cần so, kết thúc bằng break.
  • default chạy khi không case nào khớp.

Thử ngay

Dán vào Program.cs, đổi giá trị total vài lần rồi chạy dotnet run:

decimal total = 500000m;

if (total > 500000)
{
    Console.WriteLine("Miễn phí ship");
}
else
{
    Console.WriteLine("Phí ship 30000");
}

Đoán trước khi chạy: với total bằng đúng 500000, dòng nào được in?

Xem kết quả
Phí ship 30000

500000 > 500000 là sai, nên chương trình chạy nhánh else. Muốn tính cả mốc 500000 thì phải dùng >=.

Lỗi hay gặp

Dùng = thay cho ==. = là gán, không phải so sánh.

// SAI — lỗi compile: điều kiện phải là bool
int quantity = 0;
if (quantity = 0)
{
    Console.WriteLine("Hết hàng");
}
// ĐÚNG
int quantity = 0;
if (quantity == 0)
{
    Console.WriteLine("Hết hàng");
}

Quên break trong switch. C# không cho chạy tràn sang case kế tiếp.

// SAI — lỗi compile: thiếu break
string status = "new";
switch (status)
{
    case "new":
        Console.WriteLine("Đơn mới");
    case "paid":
        Console.WriteLine("Đã thanh toán");
        break;
}
// ĐÚNG
string status = "new";
switch (status)
{
    case "new":
        Console.WriteLine("Đơn mới");
        break;
    case "paid":
        Console.WriteLine("Đã thanh toán");
        break;
}

Tóm tắt

  • if / else if / else xét điều kiện từ trên xuống, chỉ chạy nhánh đúng đầu tiên.
  • Điều kiện phải là bool. So sánh dùng ==, không dùng =.
  • switch gọn hơn khi so một biến với nhiều giá trị cụ thể.
  • Mỗi case kết thúc bằng break, default bắt mọi trường hợp còn lại.

Tự kiểm tra

0/3 câu
Câu 1

int stock = 3; if (stock > 10) {...} else if (stock > 0) {...} else {...}. Nhánh nào chạy?

Câu 2

Trong switch, không case nào khớp với giá trị của biến. Chuyện gì xảy ra?

Câu 3

Bạn cần phân loại khách theo 4 hạng cố định: "silver", "gold", "platinum", "diamond". Cách viết nào gọn nhất?

Toán tử và ép kiểuVòng lặp