Lệnh rẽ nhánh trong C#

Các lệnh rẽ nhánh yêu cầu lập trình viên chỉ định một hoặc nhiều điều kiện để chương trình kiểm tra. Các câu lệnh được thực thi nếu điều kiện được xác định là đúng, các câu lệnh khác sẽ được thực thi nếu điều kiện được xác định là sai.

Sau đây là lược đồ chung của cấu trúc lệnh rẽ nhánh điển hình được tìm thấy trong hầu hết các ngôn ngữ lập trình:

Lược đồ lệnh rẽ nhánh

C# cung cấp các loại lệnh rẽ nhánh sau:

Lệnh Miêu tả
if Một lệnh if bao gồm một biểu thức logic theo sau bởi một hoặc nhiều lệnh khác.
if...else Một lệnh if có thể theo sau bởi một lệnh else (tùy ý: có hoặc không), mà có thể được thực hiện khi biểu thức logic có giá trị false.
if...else lồng nhau Bạn có thể sử dụng lệnh if hoặc lệnh else if bên trong lệnh if hoặc else if khác
switch case Lệnh switch case cho phép kiểm tra điều kiện của một biến trước khi thực thi các lệnh
switch lồng nhau Bạn có thể sử dụng một lệnh switch bên trong một lệnh switch khác

Lệnh if

Lệnh if trong C# chứa một biểu thức logic được theo sau bởi một hoặc nhiều lệnh.

Cú pháp

if (boolean_expression) 
{
   // statement(s)
}

Nếu biểu thức logic boolean_expression của câu lệnh if là true, thì khối code bên trong lệnh if sẽ được thực thi. Ngược lại thì sẽ bỏ qua lệnh if.

Sơ đồ

Sơ đồ lệnh if trong C#

Ví dụ

using System;

namespace DecisionMaking 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         // local variable definition
         int a = 10;
        
         // check the boolean condition using if statement
         if (a < 20) 
         {
            // if condition is true then print the following
            Console.WriteLine("a is less than 20");
         }
         Console.WriteLine("value of a is : {0}", a);
         Console.ReadLine();
      }
   }
}

Biên dịch và chạy chương trình sẽ cho kết quả như sau:

a is less than 20;
value of a is : 10

Lệnh if...else

Một lệnh if trong C# có thể được theo sau bởi một lệnh else tùy ý. Khối code sau lệnh else sẽ được thực hiện khi biểu thức logic là false.

Cú pháp

if (boolean_expression) 
{
   // statement(s) will execute if the boolean expression is true
} 
else 
{
   // statement(s) will execute if the boolean expression is false
}

Nếu biểu thức logic được ước lượng là true, thì khi đó khối if sẽ được thực thi, nếu không thì khối else sẽ được thực thi.

Sơ đồ

Sơ đồ lệnh if..else trong C#

Ví dụ

using System;

namespace DecisionMaking 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         // local variable definition
         int a = 100;
         
         // check the boolean condition
         if (a < 20) 
         {
            // if condition is true then print the following
            Console.WriteLine("a is less than 20");
         } 
         else 
         {
            // if condition is false then print the following
            Console.WriteLine("a is not less than 20");
         }
         Console.WriteLine("value of a is : {0}", a);
         Console.ReadLine();
      }
   }
}

Đây là kết quả khi biên dịch và chạy chương trình:

a is not less than 20;
value of a is : 100
Tip: Nếu lệnh if...else được sử dụng để kiểm tra điều kiện và trả về dữ liệu thì bạn có thể dùng biểu thức tam phân để thay thế giúp code ngắn gọn, dễ đọc và dễ hiểu.

Ví dụ sử dụng biểu thức tam phân thay thế if...else:

// some code
int a = 100, b = 30;

// lệnh rẽ nhánh if...else
if (a < 20) 
{
	return b;
}
else 
{
	return a;
}

// có thể sử dụng biểu thức tam phân để thay thế như sau
return a < 20 ? b : a;
Tip: nếu lệnh if...else được sử dụng để kiểm tra điều kiện null trước khi trả về dữ liệu chúng ta có thể sử dụng toán tử ?? để code ngắn gọn và dễ đọc.

Ví dụ sử dụng toán tử ?? thay thế cho if...else:

// some code
string a = null, b = "text";

// lệnh if...else
if (a != null)
{
	return a;
}
else 
{
	return b;
}

// sử dụng toán tử ??
return a ?? b;
Best practice: nên sử dụng phương thức string.IsNullOrEmpty(variable) để kiểm tra chuỗi bị null thay vì dùng biểu thức variable == null. Như ví dụ trên sẽ sửa lại thành if (!string.IsNullOrEmpty(a))

Lệnh if…else if…else

Một lệnh if có thể được theo sau bởi một lệnh else if…else tùy ý, mà rất có ích để kiểm tra các điều kiện đa dạng.

Khi sử dụng lệnh if, else if, else, có một số điểm chính cần ghi nhớ:

  • Một lệnh if không có hoặc có một lệnh else và chúng phải nằm sau lệnh else if cuối cùng.
  • Một lệnh if không có hoặc có nhiều lệnh else if và chúng phải ở trước lệnh else.
  • Khi một lệnh else if thực hiện, nó sẽ bỏ qua các lệnh else if hoặc lệnh else còn lại.

Cú pháp

if (boolean_expression_1) 
{
   // Executes when the boolean expression 1 is true
} 
else if ( boolean_expression_2) 
{
   // Executes when the boolean expression 2 is true
} 
else if ( boolean_expression_3) 
{
   // Executes when the boolean expression 3 is true
} 
else 
{
   // executes when the none of the above condition is true
}

Ví dụ

using System;

namespace DecisionMaking 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         // local variable definition
         int a = 100;
         
         // check the boolean condition
         if (a == 10) 
         {
            // if condition is true then print the following
            Console.WriteLine("Value of a is 10");
         } 
         else if (a == 20) 
         {
            // if else if condition is true
            Console.WriteLine("Value of a is 20");
         } 
         else if (a == 30) 
         {
            // if else if condition is true
            Console.WriteLine("Value of a is 30");
         } 
         else 
         {
            // if none of the conditions is true
            Console.WriteLine("None of the values is matching");
         }
         Console.WriteLine("Exact value of a is: {0}", a);
         Console.ReadLine();
      }
   }
}

Kết quả trả về sau khi biên dịch chương trình:

None of the values is matching
Exact value of a is: 100

Bạn có thể biên dịch và xem kết quả online của lệnh if...else if...else trong C# tại đây.

Lệnh switch case

Lệnh switch case trong C# sẽ kiểm tra giá trị của một biến trong danh sách các giá trị. Mỗi giá trị của biến được gọi là một case (trường hợp).

Cú pháp

switch (expression) 
{
   case constant-expression_1:
      // statement(s);
      break;
      
   case constant-expression_2:
   case constant-expression_3:
      // statement(s);
      break;
  
   // you can have any number of case statements
   default : // Optional
   	  // statement(s);
      break;
}

Các quy tắc một lệnh switch:

  • Biểu thức expression được sử dụng trong một lệnh switch phải có kiểu là integer, enum, char, string hoặc là một trong các kiểu lớp trong đó lớp có một hàm biến đổi đơn tới một kiểu integer hoặc kiểu liệt kê.
  • Bạn có thể có bất kỳ số lệnh case nào trong một switch. Mỗi case được theo sau bởi giá trị duy nhất không trùng lặp với các case khác để được so sánh.
  • constant-expression cho một case phải cùng kiểu dữ liệu với biến trong switch, và nó phải là hằng số.
  • Khi một case thỏa mãn điều kiện, lệnh theo sau case đó sẽ thực thi tới khi gặp lệnh break.
  • Khi gặp lệnh break, thì lệnh switch case sẽ kết thúc và thoát khỏi lệnh switch case.
  • Không nhất thiết mỗi case cần phải chứa một lệnh break. Nhưng nếu không có bất kỳ lệnh break nào sẽ bị lỗi khi biên dịch.
  • Một lệnh switch có thể có một case default (mặc định) không bắt buộc và phải đặt ở cuối cùng của switch. Case mặc định này được sử dụng để thực hiện một nhiệm vụ khi không có bất kỳ case nào true.

Sơ đồ

Sơ đồ lệnh switch case trong C#

Ví dụ

using System;

namespace DecisionMaking 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         // local variable definition
         char grade = 'B';
         
         switch (grade) 
         {
            case 'A':
               Console.WriteLine("Excellent!");
               break;
               
            case 'B':
            case 'C':
               Console.WriteLine("Well done");
               break;
               
            case 'D':
               Console.WriteLine("You passed");
               break;
               
            case 'F':
               Console.WriteLine("Better try again");
               break;
               
            default:
               Console.WriteLine("Invalid grade");
               break;
         }
         Console.WriteLine("Your grade is  {0}", grade);
         Console.ReadLine();
      }
   }
}

Kết quả khi biên dịch và chạy chương trình:

Well done
Your grade is B

Bạn có thể tự biên dịch và xem kết quả online của lệnh switch case trong C# tại đây.

Tip: Với lệnh if...else if...else if...else được sử dụng để kiểm tra các giá trị của một biến thì bạn có thể sử dụng lệnh switch case để thay thế. Việc này sẽ giúp code của bạn rất trong sáng và dễ đọc.

Lệnh switch case lồng nhau

Bạn hoàn toàn có thể sử dụng các lệnh switch case lồng nhau trong C#.

Cú pháp

switch (ch1) 
{
   case 'A':
   		Console.WriteLine("This A is part of outer switch" );   
       	switch (ch2) 
       	{
          	case 'A':
             	Console.WriteLine("This A is part of inner switch" );
             	break;
          	case 'B':
				// outer B case code
   				break;
       }
       break;
       
   case 'B': 
   		// outer B case code
   		break;
}

Ví dụ

using System;

namespace DecisionMaking 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         int a = 100;
         int b = 200;
         
         switch (a) {
            case 100: 
            	Console.WriteLine("This is part of outer switch ");
            
            	switch (b) 
                {
               		case 200:
               			Console.WriteLine("This is part of inner switch ");
               			break;
            	}
            	break;
         }
         Console.WriteLine("Exact value of a is : {0}", a);
         Console.WriteLine("Exact value of b is : {0}", b);
         Console.ReadLine();
      }
   }
} 

Kết quả chương trình trả về:

This is part of outer switch
This is part of inner switch
Exact value of a is : 100
Exact value of b is : 200

Bạn có thể biên dịch và xem kết quả online của lệnh switch case lồng nhau trong C# tại đây.

Kết luận

Bài viết này đã trình bày chi tiết về các lệnh rẽ nhánh trong C# như if, if...else, if...else if...else và switch case.

Nếu bạn có bất kỳ thắc mắc gì về lệnh rẽ nhánh trong C#, đừng ngần ngại để lại comment ở bên dưới. Mình sẽ cố gắng giải đáp sớm trong vòng 24 giờ.

Bạn có muốn xem bài viết tiếp theo không? Nó ở dưới đây nè.

Vòng lặp trong C# | Comdy
Bài viết sẽ giúp bạn hiểu rõ các loại vòng lặp trong C# như for, while, do...while, foreach.
Lập Trình C#Lập Trình C# Cơ Bản
Bài Viết Liên Quan:
int[] và int[,] trong C#: Ai nhanh hơn
Trung Nguyen 10/10/2020
int[] và int[,] trong C#: Ai nhanh hơn

Hiểu được sự khác biệt giữa các loại mảng trong C# sẽ giúp bạn chọn cấu trúc dữ liệu chính xác cho mọi trường hợp.

Struct và class trong C#: Ai nhanh hơn
Trung Nguyen 09/10/2020
Struct và class trong C#: Ai nhanh hơn

Trong bài viết này, tôi sẽ so sánh sự khác biệt về hiệu suất giữa struct và class trong C#: Ai nhanh hơn.

Best practice cho performance trong C#
Trung Nguyen 03/10/2020
Best practice cho performance trong C#

Mục tiêu của bài viết này là cung cấp một danh sách không đầy đủ các code mẫu cần tránh, vì chúng rủi ro hoặc performance kém.

Đọc ghi file (File I/O) trong C#
Trung Nguyen 26/04/2020
Đọc ghi file (File I/O) trong C#

Hướng dẫn này sẽ giúp bạn tìm hiểu về đọc ghi file (File I/O) trong C# và sử dụng các lớp tiện ích để đọc ghi file.