首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 選擇結構完整指南:if-else、三元運算子、模式比對與最佳實務

     編輯:關於C#

選擇結構核心類型

結構適用場景範例
if-else布林條件、複雜邏輯、範圍判斷if (x > 0) ... else ...
switch離散值、多重分支、模式比對switch (c) { case 'A': ... }
三元運算子簡單條件賦值/回傳var r = x > 0 ? "P" : "N";
模式比對型別檢查、解構、屬性判斷if (obj is int i) ...

if-else 進階用法


// 巢狀 if-else 重構為 else-if 鏈
if (score >= 90) grade = 'A';
else if (score >= 80) grade = 'B';
else if (score >= 70) grade = 'C';
else grade = 'F';

// 複合條件:短路求值
if (user != null && user.IsActive && user.HasPermission("Admin")) {
    GrantAccess();
}

// 模式比對增強 if (C# 7+)
if (input is int number) {
    Console.WriteLine($"整數: {number}");
} else if (input is string text) {
    Console.WriteLine($"字串: {text.Length} 字元");
}

// 宣告模式結合 when (C# 7+)
if (shape is Rectangle r when r.Width == r.Height) {
    Console.WriteLine("正方形");
}

三元運算子與 Null 合併運算子


// 基本三元
string status = isOnline ? "上線" : "離線";

// 巢狀三元 (不建議超過兩層)
string level = score >= 90 ? "優" : score >= 60 ? "及格" : "不及格";

// Null 合併 ?? (C# 2+)
string name = user?.Name ?? "訪客";

// Null 合併指派 ??= (C# 8+)
cache ??= new Dictionary();

// 條件存取 ?. 結合 ??
int length = user?.Name?.Length ?? 0;

實務決策指南

需要根據型別分派?
├─ 是 → 模式比對 (is/switch)
└─ 否 → 分支數量?
        ├─ 2 個、簡單賦值 → 三元 / ??
        ├─ 3-5 個離散值 → switch
        ├─ 複雜範圍/複合條件 → if-else 鏈
        └─ 大量分支/效能關鍵 → Dictionary/策略模式/查找表

常見反模式與重構

反模式問題重構方向
箭頭型程式碼 (深層巢狀 if)可讀性差、難測試衛語句提早返回、策略模式
魔術數字散布條件維護困難常數/列舉/設定檔
重複條件判斷效能浪費、邏輯不一致風險提取變數/方法、規格模式
switch 缺少 default新增 enum 值時無編譯警告加上 default throw 或 _ case

if-else範例
switch範例
三元運算子
模式比對1
模式比對2
模式比對3

本文對應《叩響 C# 之門》第 4.4 節選擇結構教學內容

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved