前言
第1章 C# 語言慣用語法
做法01 偏好隱含型別的區域變數
做法02 偏好 readonly 而非 const
做法03 偏好 is 或 as 運算子而非型別轉換
做法04 以內插字串取代 string.Format()
做法05 對文化特定字串偏好 FormattableString
做法06 避免字串型別 API
做法07 以 delegate 表示 callback
做法08 對事件叫用使用空條件運算子
做法09 減少 boxing 與 unboxing
做法10 只對基底類別更新使用 new 修飾詞
第2章 .NET 資源管理
做法11 認識 .NET 資源管理
做法12 偏好成員初始化程序而非指派陳述
做法13 對靜態類別成員進行適當的初始化
做法14 減少重複的初始化邏輯
做法15 避免建構不必要的物件
做法16 絕不在建構元中呼叫虛擬函式
做法17 實作標準的 Dispose 模式
第3章 使用泛型
做法18 定義最少與足夠的約束
做法19 使用執行期型別檢查特化泛型演算法
做法20 以 IComparable 與 IComparer 實作排序關係
做法21 建構支援 Disposable 型別參數的泛型類別
做法22 支援泛型的共變數與反變數
做法23 使用 delegate 定義型別參數的方法約束
做法24 勿於基底類別或界面建構泛型特化
做法25 偏好泛型方法,除非型別參數是實例欄位
做法26 除泛型界面外還要實作傳統界面
做法27 以擴充方法加入最少的界面合約
做法28 以擴充方法加強建構型別
第4章 使用LINQ
做法29 偏好以 Iterator 方法回傳集合
做法30 偏好查詢語法而非廻圈
做法31 為序列建構可組合 API
做法32 從動作、述詞與函式中解耦迭代
做法33 被請求時產生序列項目
做法34 使用函式參數解耦
做法35 不要過載擴充方法
做法36 認識查詢表示式如何對應方法呼叫
做法37 在查詢中偏好惰性求值而非積極求值
做法38 偏好 lambda 表示式而非方法
做法39 避免在函式與動作中拋出例外
做法40 區分提前與延遲執行
做法41 避免捕捉昂貴的資源
做法42 區分 IEnumerable 與 IQueryable 資料來源
做法43 使用 Single() 與 First() 以強制查詢的語意結果
做法44 避免修改限界變數
第5章 例外的最佳做法
做法45 以例外回報方法約定失敗
做法46 以 using 與 try/final 清理資源
做法47 建構完整的應用程式專屬例外類別
做法48 偏好強例外保證
做法49 偏好例外過濾而非 catch 與重新拋出
做法50 利用例外過濾的副作用
索引