C# 速查 — 簡明參考
C# 12(搭配 .NET 8)語法、OOP、LINQ 與最常用標準庫速查手冊,覆蓋約 80% 日常場景。
C# C# 12 (with .NET 8)
.NET (Core / 5+ / 8) · OOP · 泛型 · 函數式 · 併發 · 靜態 · 強類型 · 名義類型
學習路徑
先跑通「Hello World 與構建環境」(dotnet new console)→ 熟悉變量、類型與流程控制 → 用集合與 LINQ 處理數據 → 理解面向對象(class/interface)→ 掌握 async/await 異步編程 → 最後按需查文件、網絡、正則與構建調試。FAQ 節適合回頭避坑。
1.Hello World 與構建環境
從零創建、運行並組織一個 .NET 程序:頂層語句、項目文件、命名空間與命令行參數。
最小程序
C# 9+ 支持頂層語句:Program.cs 裏直接寫執行代碼,無需 class 與 Main 樣板。Console.WriteLine 輸出一行。
創建與運行
dotnet CLI 是 .NET 的命令行入口:dotnet new 建項目、dotnet run 編譯並運行、dotnet build 只編譯。
命令行參數
頂層語句中 args 是 string[] 命令行參數,args[0] 起為用户參數。與傳統 Main(string[] args) 等價。
退出碼
頂層語句可用 return 指定退出碼,0 表示成功、非 0 表示錯誤類別。Environment.ExitCode 也可讀寫。
命名空間
namespace 組織類型避免衝突。文件作用域命名空間(C# 10)用分號聲明,省去大括號縮進。
using 指令
using 指令導入命名空間,省去全限定名。GlobalUsings.cs 的全局 using 讓整個項目共享導入。
頂層語句細節
頂層語句編譯為 Program 類的 Main 方法。一個項目只能有一份;需要輔助方法用局部函數。
csproj 項目文件
csproj 是項目配置:TargetFramework 目標框架、ImplicitUsings 隱式 using、Nullable 可空上下文。
2.變量與常量
類型推斷、const/readonly、可空類型、空合併、nameof 與作用域。
var 類型推斷
var 讓編譯器從初始化器推導類型。局部變量可推斷,字段/屬性不行。初始化器類型明確時優先 var 更簡潔。
const 與 readonly
const 是編譯期常量(基本類型),readonly 是運行期只讀字段(可在構造函數賦值)。靜態常量多用 static readonly。
可空類型
Nullable<T>(int? 等)讓值類型可為 null;可空引用類型(? 後綴 + Nullable enable)讓編譯器靜態分析空引用。
空合併與空條件
?? 在左側為 null 時返回右側;?. 在左側為 null 時短路返回 null。鏈式 ?. 讓深訪問可空安全。
nameof 表達式
nameof 返回符號名字符串,改名時自動同步。常用於參數校驗、屬性通知、日誌標籤。
作用域
C# 用大括號定義塊作用域。局部變量可與字段同名但建議避免遮蔽;using 聲明限制資源作用域到塊尾。
init 與屬性初始化
init 訪問器允許在對象初始化器裏賦值、之後只讀。屬性初始化器給默認值,set 訪問器可加校驗。
解構
元組與 record 支持解構:用圓括號把元素拆成多個變量。析構方法 Deconstruct 自定義解構邏輯。
3.數據類型
內置類型、可空、枚舉、結構體、泛型、record、元組與類型轉換。
內置類型
int/long/double/bool 等內置類型映射到 System 類型。var 只是推斷,運行時類型不變。
可空類型
int? 是可空值類型(Nullable<int>),HasValue/Value 訪問。可空引用類型在 Nullable enable 下由編譯器靜態檢查。
枚舉
enum 定義命名整型常量,底層默認 int。Flags 特性讓位組合可用 HasFlag 或位運算判斷。
結構體
struct 是值類型:賦值拷貝整塊、棧上分配、不能為 null(可空時裝箱)。小且不變的數據用 struct。
類(引用類型)
class 是引用類型:賦值共享同一對象、GC 管理內存、可為 null。可變狀態多用 class。
泛型
泛型把類型參數化,編譯期生成強類型代碼、無運行時裝箱。T 是類型參數,where 子句加約束。
record 類型
record(C# 9)是值語義的引用類型:自帶值相等、ToString、解構、with 表達式。適合 DTO 與不可變數據。
元組
元組把多個值打包,支持命名元素。返回多個值、快速聚合數據時最方便,臨時用元組、長期用 record。
類型轉換
is 安全類型檢查、as 安全轉換(失敗返 null)、(T) 強制轉換(失敗拋異常)、Convert/Parse 顯式解析。
模式匹配
is/switch 用模式匹配:類型模式、屬性模式、位置模式。替代大量 if + cast,代碼更表達意圖。
4.引用與數組
值類型與引用類型、數組、Span、索引範圍、ref/in/out 與 unsafe 指針。
值類型 vs 引用類型
值類型(struct/枚舉/基本類型)賦值即拷貝;引用類型(class/接口)賦值共享對象。這是 C# 最重要的心智模型。
數組
數組是定長引用類型,[] 下標訪問。多維與交錯數組不同:[,] 矩形、[][] 鋸齒。數組用 Length 而非 Count。
索引與範圍
^ 從尾部索引(^1 最後一個)、.. 表示範圍(1..^1 去掉首尾)。切數組/List 子集的現代寫法。
Span 與內存
Span<T> 是任意連續內存的只讀視圖,無分配、可切片,是高性能數據處理的核心。棧或堆內存都能指向。
ref / in / out 參數
ref 按引用傳遞可讀寫、in 按引用傳遞只讀、out 用於返回值(調用前可不初始化)。按引用避免值類型拷貝。
unsafe 指針
unsafe 上下文可用真指針(int* 等),需在 csproj 開 AllowUnsafeBlocks。僅與原生交互時用,普通代碼避免。
Memory 與緩衝區
Memory<T> 是 Span 的堆安全版本,可存字段、跨 async。ReadOnlyMemory 只讀視圖。用於異步緩衝數據處理。
拷貝語義
值類型默認按值傳遞(大 struct 有拷貝開銷);對象(引用)按引用傳遞。需要原地修改對象則不用 ref。
5.流程控制
if/else、for/foreach/while、switch 表達式、break/continue 與 throw 表達式。
if / else
if/else 按條件分支。C# 用 == 比較、&& 與 || 短路。單語句可省大括號但建議保留。
for 循環
經典 for:初始化、條件、步進。需要下標或索引時用;多數情況 foreach 更安全。
foreach 遍歷
foreach 遍歷集合無需下標,編譯期安全。配合 var 與 LINQ 鏈式處理數據最常用。
while / do-while
while 先判斷後執行;do-while 至少執行一次。讀取流直到結束等循環次數未知的場景用。
switch 表達式
switch 表達式(C# 8)用 => 返回值,替代長 if-else 鏈。類型模式與 when 守衞配合強大。
break 與 continue
continue 跳本輪進入下一輪;break 退出循環;return 退出方法。多層循環用 goto 跳出。
三元運算符
cond ? a : b 一行表達 if/else 賦值。分支表達式類型必須兼容(可轉換到共同類型)。
throw 表達式
throw 可作為表達式用在 ?? 與 ?: 右側、方法體單行。拋 ArgumentNullException 校驗參數簡潔。
6.函數與方法
方法簽名、參數傳遞、重載、局部函數、Lambda 與表達式體成員。
方法定義
方法 = 返回類型 + 名稱 + 參數表 + 主體。返回 void 表示無返回值。訪問修飾符控制可見性。
參數傳遞
默認按值傳遞:方法內修改不影響調用方變量。對象傳的是引用副本,改成員會影響原對象。
可選參數與命名參數
可選參數給默認值(必須放參數表末尾);命名參數按名字傳參,可跳過中間可選參數。
ref / out / in
ref 引用傳遞可讀可寫;out 只用於輸出(調用前可不初始化);in 引用傳遞只讀(避免大值類型拷貝)。
方法重載
重載 = 同名方法不同參數列表(數量/類型)。編譯器按實參選最匹配版本。返回類型不能參與重載區分。
表達式體成員
方法/屬性/構造函數為單個表達式時可用 => 簡寫。lambda 類似,但表達式體成員是真正的成員。
局部函數
方法內定義的方法可訪問外層變量(閉包),常用於遞歸輔助或迭代器內部邏輯。
Lambda 表達式
匿名函數:參數 => 表達式。配合委託/Func/Action 使用,是 LINQ 的核心語法。
委託
委託是方法類型:聲明簽名,用 += 訂閲多個方法,調用委託會依次觸發。事件基於委託。
7.字符串
字符串字面量、插值、常用方法、可變 StringBuilder 與格式化。
字符串字面量
雙引號普通字符串、@ 原義字符串(轉義符不處理)、$ 插值、$$ 複合字面量(C# 11)。
字符串插值
$ 前綴把 {} 表達式結果內聯進字符串;可帶格式與對齊。比 + 拼接更可讀。
拼接與比較
+ 拼接、string.Concat 批量、string.Join 帶分隔符。字符串相等用 ==(值比較)而非 == 引號。
常用方法
Length、Substring、Contains、StartsWith、IndexOf、Replace、Trim、Split、ToUpper/ToLower 覆蓋絕大多數字符串處理。
StringBuilder
大量拼接用 StringBuilder 避免反覆建字符串(字符串不可變,+ 每次生成新對象)。循環內拼接尤其明顯。
字符 char
char 是 UTF-16 單字符。char.IsDigit/IsLetter/IsWhiteSpace 判斷類別。string 不可變、char 可遍歷。
格式化
string.Format / $ 插值用格式説明符:D 整數、F 小數、C 貨幣、P 百分比、X 十六進制。
解析字符串
Parse 轉換字符串到數字(失敗拋異常),TryParse 安全(返回 bool + out 結果)。TryParse 優先。
8.集合與 LINQ
List/Dictionary/HashSet 等常用集合、IEnumerable 與 LINQ 鏈式查詢。
List 動態數組
List<T> 可變長數組,Add/Insert/Remove/IndexOf,按下標 O(1) 訪問。遍歷用 foreach。
Dictionary 字典
Dictionary<K,V> 鍵值映射,按鍵 O(1) 查詢。TryGetValue 安全取值,遍歷 KeyValuePair。
HashSet 集合
HashSet<T> 無重複、O(1) 判斷包含。UnionWith/IntersectWith/ExceptWith 做集合運算去重合並。
Queue 與 Stack
Queue<T> 先進先出(Enqueue/Dequeue),Stack<T> 後進先出(Push/Pop)。處理任務隊列、撤銷棧。
IEnumerable 與惰性
IEnumerable<T> 是隻讀序列接口,LINQ 基於它惰性求值:遍歷時才算。數組/List/字典都實現它。
LINQ 過濾與映射
Where 過濾、Select 投影(映射)、OrderBy 排序、Distinct 去重。方法鏈可讀且惰性。
LINQ 聚合
Count/Sum/Average/Min/Max 聚合,Any/All 判斷,First/Single 取元素(無匹配拋異常,FirstOrDefault 返默認)。
GroupBy 分組
GroupBy 按鍵分組,產生 IGrouping 序列,常用於統計(計數、求和按類別)。
LINQ 查詢語法
from/where/orderby/select 查詢語法是方法鏈的聲明式寫法,編譯後等價。可讀性偏好問題。
9.內存與資源管理
GC 自動回收、IDisposable 與 using 釋放非託管資源、弱引用與對象池。
GC 垃圾回收
C# 內存由 GC 自動管理:堆上對象不再引用時被回收。代際回收(0/1/2)優化性能。
IDisposable 接口
持有非託管資源(文件/網絡/數據庫連接)的類實現 IDisposable,在 Dispose 裏釋放資源。
using 語句與聲明
using 保證作用域結束時 Dispose(finally 語義)。using 聲明(C# 8)讓資源隨塊結束自動釋放。
終結器
析構函數 ~Class() 是終結器:GC 回收前調用,無法保證時機。僅用於釋放非託管資源,正常應走 Dispose 模式。
弱引用
WeakReference 不阻止 GC 回收目標,用於緩存(字典緩存重對象、允許被回收)。Target 可能隨時變 null。
對象池與 ArrayPool
頻繁分配大數組用 ArrayPool 複用緩衝減少 GC 壓力。ArrayPool<T>.Shared.Rent/Return 成對使用。
stackalloc 棧分配
stackalloc 在棧上分配內存,速度快且不觸發 GC,適合小型臨時緩衝,棧空間有限需謹慎使用。
GC 內存壓力
分配大量原生內存時用 GC.AddMemoryPressure 告知 GC,讓回收器及時回收託管對象,避免內存佔用失控。
10.面向對象
類、屬性、構造、繼承、多態、接口、抽象類與訪問修飾符。
類與對象
class 定義數據類型(引用類型)。字段存狀態、屬性控制訪問、方法定義行為、構造函數初始化。
屬性
屬性是字段的安全訪問器:get 讀、set 寫,可加訪問修飾符與校驗邏輯。編譯器生成後備字段。
繼承
C# 單繼承:class 用 : 繼承一個基類。派生類 is-a 基類。私有成員不繼承,protected 可訪問。
多態
virtual + override 實現多態:基類引用調用的方法按實際類型分派。方法必須 virtual 才能被重寫。
抽象類
abstract 類不能實例化,可含 abstract 方法(子類必須實現)。抽象方法無主體。用於模板基類。
接口
interface 定義契約:成員無實現,實現類全部實現。C# 支持多接口實現(多繼承替代)。
訪問修飾符
public 公開、private 私有、protected 派生可見、internal 程序集內可見。默認類 private、成員 private。
sealed 與 object 方法
sealed 類不可被繼承、override 方法不可再被重寫。所有類隱式繼承 object(ToString/Equals/GetHashCode)。
靜態類與擴展方法
static class 只能含靜態成員、不能實例化。擴展方法:靜態類裏的靜態方法,this 參數讓實例可調用。
11.異常處理
try/catch/finally、異常類型、自定義異常、異常的代價與最佳實踐。
try / catch / finally
try 放可能出錯的代碼;catch 捕獲處理;finally 無論成敗都執行(清理資源)。異常向上傳播。
多 catch 與異常過濾
多個 catch 按類型匹配,特定異常在前。when 過濾條件。catch 不聲明變量可忽略異常對象。
拋出異常
throw new 拋異常;throw; 不帶參數原樣重拋(保留堆棧)。new 而 throw 在 catch 裏會重置堆棧。
自定義異常
自定義異常繼承 Exception(慣例加 Exception 後綴),提供構造函數,保留內部異常 InnerException。
finally 清理
finally 保證資源釋放/狀態恢復,無論 try 是否異常。return 也會先執行 finally。using 是它的語法糖。
異常的代價
異常捕獲開銷高,不要用異常做流程控制。可預判的錯誤用返回碼/TryXxx/Result 模式處理。
全局異常處理
頂層用 try/catch 捕獲未處理異常,記錄日誌。ASP.NET 用中間件(UseExceptionHandler)統一處理。
InnerException 鏈
捕獲異常後可拋新異常並傳入原異常作為 InnerException,保留完整錯誤鏈,日誌排查更有價值。
12.文件與 IO
File/Directory/Path 靜態工具、Stream 讀寫、異步 IO 與二進制處理。
讀寫文本文件
File.ReadAllText/WriteAllText 一次讀寫小文件;ReadAllLines 逐行數組。大文件用 StreamReader。
StreamReader 逐行
大文件逐行流式讀取不佔內存。StreamReader.ReadLine 循環直到 null(文件尾)。
目錄操作
Directory 創建/刪除/枚舉目錄,Directory.GetFiles/EnumerateFiles 找文件。遞歸枚舉用 SearchOption。
Path 路徑處理
Path 跨平台拼接/解析路徑:Combine、GetExtension、GetFileName、ChangeExtension。不要手拼路徑分隔符。
異步 IO
async/await IO 不阻塞線程:ReadAllTextAsync/WriteAllTextAsync/Stream 方法。UI/服務器併發場景必須用。
二進制讀寫
BinaryWriter/BinaryReader 按類型讀寫;MemoryStream 內存流。網絡與文件二進制協議常用。
控制台 IO
Console.ReadLine 讀一行、ReadKey 讀按鍵、WriteLine 輸出。重定向流 Console.In/Out 可測試。
文件信息
FileInfo/DirectoryInfo 提供文件元數據與方法;File.Exists 檢查存在性;GetCreationTime 時間戳。
13.常見陷阱(FAQ)
C# 開發者最常踩的坑:值類型 vs 引用、字符串相等、LINQ 惰性、async/await 死鎖等。
字符串 == 與 Equal
C# 的 string == 按值比較(不同於 Java)。但 == 用序比較,Equals 可指定 StringComparison 做忽略大小寫等。
傳值 vs 傳引用
方法參數默認按值傳:對象傳的是引用副本,改成員會影響原對象;值類型拷貝。忘記這點是常見 bug。
LINQ 惰性求值
LINQ 查詢是惰性的:不枚舉不算。把 IQueryable/IEnumerable 傳出去後再枚舉可能有副作用或已過期數據。
async void 與死鎖
事件處理器可用 async void,普通方法必須返回 Task。sync 上下文(UI/WinForms)裏 .Result/.Wait() 會死鎖。
異常吞掉與重拋
catch 後不處理就吞掉;throw ex 重置堆棧丟失原異常鏈。日誌必須保留 InnerException。
資源未釋放
Stream/HttpClient/數據庫連接不釋放會泄漏資源。IDisposable 一律用 using 或用完 Dispose。
浮點比較
float/double 二進制表示不精確,直接 == 比較會出意外。用 epsilon 容差或 decimal 精確運算。
遍歷時修改集合
foreach 裏 Add/Remove 集合拋 InvalidOperationException。收集要刪的元素,遍歷後再刪除。
可空與空引用
Nullable enable 後編譯器幫助發現空引用。避免直接返回 null 歧義,用 ?? / ?. 提供兜底。
本地時間 vs UTC
存儲/傳輸時間用 UTC(DateTimeKind.Utc),展示時轉本地。混用 Kind 會靜默算錯時間。
14.併發與異步
Task 異步編程、Parallel 並行、lock 同步與線程安全集合。
async / await
async 方法返回 Task;await 讓出線程、完成後恢復。期間線程可用於其他工作,不阻塞。
Task 與返回值
Task 表示異步操作;Task<T> 帶返回值。Task.Run 把同步工作放線程池,ContinueWith 鏈式。
Parallel 並行
Parallel.For/ForEach 用線程池並行執行獨立工作。CPU 密集可多核利用;注意線程安全與過度並行。
lock 同步
lock 保證同一時刻只有一個線程進入臨界區。鎖對象通常是私有 readonly 字段,避免鎖 this。
Thread 線程
Thread 手動管理線程:Start 啓動、Join 等待。大多場景 Task/Parallel 更合適,Thread 用於長駐後台任務。
CancellationToken
CancellationToken 協作式取消:令牌觸發 IsCancellationRequested,async 方法拋 OperationCanceledException。
併發集合
多線程安全集合:ConcurrentDictionary、ConcurrentQueue、ConcurrentBag。替代手動加鎖讀寫的普通集合。
異步最佳實踐
全程 async(async all the way):別用 .Result 阻塞。ConfigureAwait(false) 在庫代碼避免回到同步上下文。
15.網絡與 HTTP
HttpClient 發起請求、JsonSerializer 序列化、WebSocket 與 Socket。
HttpClient 基礎
HttpClient 發 HTTP 請求。GetStringAsync 簡單文本、GetAsync 完整響應。HttpClient 應長期複用(單例)。
POST 與 JSON
PostAsJsonAsync 發 JSON;PostAsync 發自定義內容。響應 ReadAsStringAsync 讀取。JsonSerializer 序列化。
請求頭與查詢參數
HttpRequestMessage 設 Headers(認證/User-Agent),URI 構建查詢字符串。注意默認 User-Agent 被拒的 API。
System.Text.Json
JsonSerializer.Serialize/Deserialize 序列化 JSON。JsonSerializerOptions 配置大小寫/枚舉/忽略 null。
調用 Web API
組合:構建請求 → 校驗狀態 → 反序列化。HttpStatusCode 檢查、ReadFromJsonAsync 一行完成。
WebSocket
ClientWebSocket 建立全雙工通道,SendAsync/ReceiveAsync 收發。適合實時推送(聊天、行情)。
DNS 與 Socket
Dns.GetHostAddresses 解析域名;Socket 是底層傳輸。大多數應用用 HttpClient 就夠,Socket 用於自定義協議。
下載與流式處理
下載大文件用 Stream 流式寫入避免佔內存。HttpCompletionOption.ResponseHeadersRead 立即返回流。
16.日期與時間
DateTime 與 TimeSpan、時區與偏移、格式化和解析。
DateTime 基礎
DateTime 表示日期時刻:Now 本地、UtcNow UTC、Today 日期。AddDays/AddHours 做日期運算。
TimeSpan 時間間隔
TimeSpan 表示間隔:兩時間相減得到,FromDays/FromHours 構建,Days/Hours 拆分量。
DateTimeOffset
DateTimeOffset 帶時區偏移,跨時區推薦。與 UTC 互轉安全,避免本地時區歧義。
DateTimeKind
DateTime 有 Kind:Unspecified/Local/Utc。未指定 Kind 的本地時間轉 UTC 會出錯,存儲用 Utc。
解析與格式化
DateTime.Parse/ParseExact 解析;TryParse 安全。格式符 yyyy/MM/dd、HH:mm:ss、ffff 毫秒。
時區轉換
TimeZoneInfo 做時區轉換:FindSystemTimeZoneById、ConvertTimeFromUtc。服務器通常存 UTC,展示時轉本地。
Stopwatch 計時
Stopwatch 高精度測時(毫秒級)。Start/Stop/Elapsed/ElapsedMilliseconds,性能測量標配。
DateOnly 與 TimeOnly
DateOnly 僅表示日期、TimeOnly 僅表示時間(C# 10),無時區負擔,適合生日、日曆與排班等場景。
17.進程與系統
啓動外部進程、環境變量、路徑與系統信息。
啓動進程
Process.Start 啓動外部程序(shell 命令、其他可執行文件)。ArgumentList 傳參避免拼接注入。
環境變量
Environment.GetEnvironmentVariable 讀、SetEnvironmentVariable 寫(進程級)。GetEnvironmentVariables 全部。
系統信息
Environment 提供系統信息:OSVersion、MachineName、CurrentDirectory、ProcessorCount、TickCount。
命令行解析
args 傳入命令行參數;Environment.GetCommandLineArgs 取完整(含程序名)。命令行工具參數解析。
退出與信號
Environment.Exit(1) 立即退出;ExitCode 設置退出碼。AppDomain.ProcessExit 事件做清理。
枚舉進程
Process.GetProcesses 枚舉系統進程,讀取 Id/ProcessName/WorkingSet64 等信息,Kill 結束進程。
Windows 註冊表
Microsoft.Win32.Registry 讀寫註冊表(僅 Windows)。GetValue/SetValue 訪問鍵值,需適當權限。
應用程序路徑
AppContext.BaseDirectory 是程序運行目錄,Environment.ProcessPath 是當前進程路徑,定位資源文件用它們。
18.正則表達式
Regex 匹配、捕獲組、替換與常用模式。
Regex 基礎
Regex.IsMatch 判斷、Matches 找全部、Match 找第一個。用 @ 原義字符串避免雙重轉義。
捕獲組
圓括號捕獲子串;Groups[1]、命名組 (?<name>...) 用 Groups["name"]。捕獲用於提取字段。
替換
Regex.Replace 用模式替換,$1/$2 引用捕獲組。可用於格式化、脱敏、清理文本。
RegexOptions
RegexOptions.IgnoreCase 忽略大小寫、Multiline 讓 ^/$ 匹配行、Compiled 編譯加速重複使用。
常用模式
郵箱、URL、IP、手機號的常用正則。注意:複雜校驗(真郵箱)用專門庫而非正則。
量詞與錨點
* 零或多次、+ 一次或多次、? 零或一次、{n,m} 指定次數;^ 行首、$ 行尾、\b 詞邊界。
斷言與前視後視
零寬斷言不消耗字符:(?<=...) 後視、(?=...) 前視、(?!...) 否定前視,用於匹配位置條件。
回溯與 ReDoS
嵌套量詞與備選分支會引發回溯,惡意輸入可造成指數級匹配(ReDoS),需限制超時或禁用回溯。
19.構建與調試
dotnet CLI、項目配置、調試、日誌與條件編譯。
dotnet CLI
dotnet build 編譯、run 運行、test 測試、publish 發佈。--configuration Release 發佈配置。
csproj 配置
csproj 控制構建:TargetFramework、Nullable、ImplicitUsings、PackageReference 依賴、LangVersion。
調試與日誌
Debug.WriteLine 僅 Debug 構建;Trace 都可用。ILogger 記錄日誌級別。Console.WriteLine 調試臨時用。
條件編譯
#if DEBUG / #elif / #endif 按符號裁剪代碼。項目級 DefineConstants 自定義符號。
單元測試
xUnit/NUnit/MSTest 斷言行為。[Fact] 測試方法、Assert.Equal 斷言。dotnet test 運行。
NuGet 包管理
dotnet add package 添加依賴,restore 還原。PackageReference 在 csproj 記錄版本。
發佈與單文件
dotnet publish 發佈生產版本;PublishSingleFile 打包單文件、SelfContained 免安裝運行時。
靜態分析器
Roslyn 分析器在編譯期檢查代碼質量與潛在缺陷,警告可升級為錯誤,阻止帶問題的構建發佈。
關於本速查
本頁是 C# 12(.NET 8)的自包含速查手冊,覆蓋語言核心、BCL 常用類型與異步編程在真實項目中約 80% 的常見用法。內容偏向現代慣用法:屬性與自動屬性、LINQ、async/await、record 類型、模式匹配、可空引用類型。C# 由 Anders Hejlsberg 於 2000 年隨 .NET 平台推出,是 Windows 生態、Unity 遊戲開發與後端服務的核心語言,強調類型安全與生產力和諧統一。 19 個章節各自聚焦一個主題:基礎語法、變量、類型與引用/值語義、控制流、函數、字符串、集合、內存管理(GC)、面向對象、錯誤處理、輸入輸出、常見誤區、併發、網絡、時間、進程、正則與構建工具。每個小節都配有「概念介紹 + 可直接複製的代碼片段」。 所有代碼與文字均在瀏覽器本地渲染,無任何數據離開你的設備。權威參考見 Microsoft Learn 官方文檔。
版本 2.1.0