Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Toán tử ba ngôi (Ternary Operator / Conditional Operator) trong C#

Toán tử ba ngôi (?:) là toán tử điều kiện duy nhất trong C# nhận 3 toán hạng: condition ? trueExpression : falseExpression. Trả về giá trị của biểu thức đúng hoặc sai.

Cú pháp

condition ? exprTrue : exprFalse
  • condition: Biểu thức boolean.
  • exprTrue: Giá trị trả về nếu condition = true.
  • exprFalse: Giá trị trả về nếu condition = false.
  • Hai biểu thức phải cùng kiểu hoặc có chuyển đổi ngầm.

Ví dụ cơ bản

using System;

class Program
{
    static void Main()
    {
        int a = 10;
        int b = (a == 1) ? 20 : 30; // false → 30
        Console.WriteLine($"b = {b}"); // 30
        
        b = (a == 10) ? 20 : 30; // true → 20
        Console.WriteLine($"b = {b}"); // 20
        
        // Lồng nhau (nested ternary) - NÊN TRÁNH
        int max = (a > 5) ? (a > 15 ? a : 15) : 5;
        Console.WriteLine($"max = {max}");
    }
}

Kết quả

b = 30
b = 20
max = 15

Các trường hợp dùng hay

1. Gán giá trị mặc định (Null coalescing ??: tốt hơn cho null)

string name = input ?? "Guest"; // Null-coalescing (C# 2.0+)
string name2 = input != null ? input : "Guest"; // Ternary tương đương

2. Điều kiện trong expression (expression-bodied members)

public string Status => isActive ? "Active" : "Inactive";
public int Max(int a, int b) => a > b ? a : b;

3. Format chuỗi có điều kiện

Console.WriteLine($"Bạn {(age >= 18 ? "được" : "KHÔNG được")} bầu cử");

Lưu ý quan trọng

  • Không phải statement: Không thể dùng như if đơn độc. Phải gán hoặc return.
  • Type compatibility: Hai nhánh phải cùng kiểu hoặc có implicit conversion.
  • Độ ưu tiên thấp: Cần ngoặc khi kết hợp: result = (cond ? a : b) + c;.
  • Không lồng sâu: Khó đọc. Dùng if/else hoặc switch expression (C# 8+).

Switch Expression (C# 8+) - Thay thế ternary lồng

// Thay vì: x > 0 ? "Positive" : x < 0 ? "Negative" : "Zero"
string sign = x switch
{
    > 0 => "Positive",
    < 0 => "Negative",
    _ => "Zero"
};

So sánh với if-else

Đặc điểmTernary (?:)if-else
Là expressionCó (trả về giá trị)Không (statement)
Gán biến inlineDễ dàngCần block
Đọc hiểuĐơn giản: OK. Phức tạp: KhóRõ ràng cho logic phức tạp
DebugKhó breakpoint nhánhDễ dàng

Quy tắc: Dùng ternary cho logic đơn giản, gán giá trị. Dùng if-else/switch cho logic phức tạp, side effects, nhiều câu lệnh.