優秀的 C# 開發者不僅懂語法,更懂得在工程實踐中做出正確的權衡。以下 50 條精選自資深專家經驗,涵蓋類型設計、資源管理、效能優化、架構決策等核心領域。
readonly 而非 const:執行期常數、支援參考型別、版本相容as 而非強制轉型:失敗回傳 null 不拋例外,配合 null 條件運算子更安全[Conditional] 取代 #if DEBUG:保留呼叫端資訊、IL 更乾淨ToString():除錯、日誌、序列化的基礎ReferenceEquals、Equals、==、IEquatable<T>GetHashCode 缺陷:可變物件勿作雜湊鍵、衝突處理、分散性要求foreach:語意清晰、避免越界、支援 IEnumerablethis(...) 串聯、單一初始化路徑using/try-finally 管理資源:確定性釋放、IDisposable 模式struct、Span<T>、避免大型物件堆積ref structDispose 模式:Dispose(bool)、終結器、GC.SuppressFinalizeoverride 語意不同Func<T>/Action<T> 替代自訂委派EventHandler<TEventArgs>、EventArgs 衍生ReadOnlyCollection、不可變型別Attribute + 反射、原始碼產生器IComparable<T>/IComparer<T>:避免裝箱、強型別ICloneable:淺/深層複製語意不明、改用建構函式/工廠From/To 方法new:刻意隱藏、文檔說明internal 預設、最小公開介面virtual OnEvent 模式Debug/Trace/EventLog:條件編譯、生產環境可觀測IConfiguration、Options 模式INotifyPropertyChanged、INotifyCollectionChangedDataAnnotations、FluentValidation、領域驗證List/HashSet/Dictionary/ImmutableList...DataSet:效能、序列化考量Exception 衍生、Serializable、內部錯誤碼SafeHandle、P/Invoke 簽名正確性unsafe、UnmanagedCallersOnly這 50 條不是教條,而是經驗提煉。真正的精進在於:理解每條背後的原理,並在具體情境中做出有意識的選擇。建議將其作為 Code Review 清單、團隊編碼規範基礎、面試考察大綱。