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