在 C# 程式碼中,你是習慣寫 string 還是 String?int 還是 Int32?這不只是大小寫風格偏好,背後涉及 **C# 語言關鍵字** 與 **CLR 類型系統** 的映射關係。本文深度解析兩者差異、編譯行為、官方建議與實務選型指南。
| 特性 | string (小寫) | String (大寫) |
|---|---|---|
| 分類 | C# **關鍵字** (Keyword) | CLR 類型名稱 / System.String 別名 |
| 命名空間 | 無需 using System; | 需 using System; 或完整寫 System.String |
| 語法著色 | Visual Studio 顯示為**關鍵字色** (預設藍色) | 顯示為**類型色** (預設青綠色) |
| 可做變數名 | 不可 (保留字) | 可 (如 var String = "hi";) |
| 編譯結果 | 編譯為 System.String | 編譯為 System.String |
| IL 指令 | 完全相同 | 完全相同 |
| 效能 | **零差異** | **零差異** |
C# 編譯器內建將關鍵字對應至 CLR 類型,等同於隱含宣告:
using string = System.String;
using int = System.Int32;
using uint = System.UInt32;
using short = System.Int16;
using ushort = System.UInt16;
using long = System.Int64;
using ulong = System.UInt64;
using byte = System.Byte;
using sbyte = System.SByte;
using float = System.Single;
using double = System.Double;
using decimal = System.Decimal;
using bool = System.Boolean;
using object = System.Object;
using char = System.Char;
「在程式碼中使用 CLR 類型名稱 (如
String,Int32),而非語言關鍵字 (如string,int)。」
理由:
String、F# 寫 string (小寫函數)、C++/CLI 寫 String^。使用 CLR 名稱讓程式碼更易被其他 .NET 語言開發者閱讀。String.Format 是靜態方法,寫 string.Format 雖能編譯 (關鍵字可當類型名用),但語意上像呼叫實例方法,易誤導。Int32 明確表達 32 位元,int 在極少數平台理論上可能不同 (實際上 CLI 標準固定 32 位)。**Microsoft 官方文件、.NET Runtime 原始碼、Framework Design Guidelines** 均**推薦使用關鍵字** (string, int, bool...)。
"", 123, true) 風格一致。| 情境 | 建議 | 理由 |
|---|---|---|
| 一般應用開發 | 統一用關鍵字 (string, int) | 符合 C# 慣例、VS 著色清晰、團隊熟悉度高 |
| 開發基礎函式庫/供多語言呼叫 | 公開 API 簽名用 CLR 名稱 (String, Int32) | 跨語言友善、文件產生器輸出標準 |
| 呼叫靜態方法 | String.Compare, Int32.Parse | 語意明確:呼叫類型層級方法,非實例 |
| 宣告變數/參數/回傳型別 | string name, int count | 區域變數用關鍵字最自然 |
| 反射/序列化/型別中繼資料 | typeof(String), nameof(String) | 涉及 CLR 型別系統時用完整名稱 |
string 是實質類型,String 是參考類型。class),不可變、駐留池機制相同。string 比 String 快。using System; 才能用 String。string 關鍵字不需 using;String 需 using System; 或寫 System.String。string 與 String **功能零差異**,選擇純屬**程式碼風格**。
string, int, bool...),搭配 .editorconfig 強制風格。**黃金法則**:團隊內統一風格 > 個人偏好 > 理論爭論。設定好 .editorconfig,讓格式化工具幫你守住一致性。