Trong C#, bạn có thể dùng một câu lệnh switch bên trong một switch khác. Có thể có switch như một phần của chuỗi câu lệnh của switch bên ngoài. Ngay cả khi hằng case của switch bên trong và bên ngoài có giá trị chung, cũng không xảy ra xung đột.
Cú pháp
switch (ch1)
{
case 'A':
Console.WriteLine("A thuộc switch ngoài");
switch (ch2)
{
case 'A':
Console.WriteLine("A thuộc switch trong");
break;
case 'B':
// code case B bên trong
break;
}
break;
case 'B':
// code case B bên ngoài
break;
}
Ví dụ hoàn chỉnh
using System;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
int a = 100;
int b = 200;
switch (a)
{
case 100:
Console.WriteLine("Phần switch ngoài");
switch (b)
{
case 200:
Console.WriteLine("Phần switch trong");
break;
}
break;
}
Console.WriteLine("Giá trị a: {0}", a);
Console.WriteLine("Giá trị b: {0}", b);
Console.ReadLine();
}
}
}
Kết quả
Phần switch ngoài Phần switch trong Giá trị a: 100 Giá trị b: 200
Lưu ý
- Mỗi
casecầnbreak(trừ case cuối hoặc dùnggoto case) - Switch lồng nhau hữu ích cho state machine, parser, menu đa cấp
- C# 7+: Pattern matching trong switch (
case int x when x > 0:) - C# 8+: Switch expression (biểu thức switch) ngắn gọn hơn
Switch expression (C# 8+)
string result = (a, b) switch
{
(100, 200) => "Outer 100, Inner 200",
(100, _) => "Outer 100, Inner khác",
_ => "Khác"
};