C# 速查表
最后更新
Hello World 与程序结构
顶级语句(.NET 6 起)让你不必再写样板类。
| 元素 | 代码 |
|---|---|
| 顶级程序 | Console.WriteLine("Hello, World!"); |
| 导入命名空间 | using System; |
| 传统入口点 | static void Main(string[] args) { ... } |
| 输出一行 | Console.WriteLine("text"); |
| 读取一行 | string s = Console.ReadLine(); |
| 字符串插值 | Console.WriteLine($"Hi {name}"); |
| 注释 | // line 和 /* block */ |
数据类型
| 类型 | 说明 |
|---|---|
int | 32 位有符号整数 |
long | 64 位有符号整数 |
double / float | 浮点数 |
decimal | 高精度小数(适合金额) |
bool | true 或 false |
char | 单个 Unicode 字符 |
string | 不可变的文本 |
var | 由编译器推断类型 |
int? | 可空值类型 |
变量
| 操作 | 语法 |
|---|---|
| 声明并初始化 | int x = 5; |
| 类型推断 | var name = "Ada"; |
| 常量 | const double Pi = 3.14159; |
| 只读字段 | readonly int id; |
| 可空引用 | string? maybe = null; |
| 空合并 | var y = maybe ?? "default"; |
| 空条件 | int? len = text?.Length; |
流程控制
| 语句 | 语法 |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| switch 语句 | switch (n) { case 1: ...; break; default: ...; } |
| switch 表达式 | var s = n switch { 1 => "one", _ => "other" }; |
| while 循环 | while (i < n) { ... } |
| do-while 循环 | do { ... } while (i < n); |
| for 循环 | for (int i = 0; i < n; i++) { ... } |
| foreach 循环 | foreach (var item in list) { ... } |
| Break / continue | break; 跳出循环,continue; 跳到下一次迭代 |
方法
| 操作 | 语法 |
|---|---|
| 定义方法 | int Add(int a, int b) { return a + b; } |
| 表达式体方法 | int Add(int a, int b) => a + b; |
| 无返回值 | void Greet() { ... } |
| 可选参数 | int Pow(int b, int e = 2) { ... } |
| 命名参数 | Pow(b: 2, e: 3); |
| out 参数 | bool TryParse(string s, out int n) { ... } |
| 静态方法 | static int Square(int x) => x * x; |
| Lambda 表达式 | Func<int, int> f = x => x * 2; |
类与面向对象
| 操作 | 语法 |
|---|---|
| 定义类 | class Dog { ... } |
| 自动属性 | public string Name { get; set; } |
| 只读属性 | public int Id { get; } |
| 构造函数 | public Dog(string name) { Name = name; } |
| 创建对象 | var d = new Dog("Rex"); |
| 继承 | class Puppy : Dog { ... } |
| 接口 | interface IRunnable { void Run(); } |
| 重写方法 | public override void Speak() { ... } |
| 记录(不可变) | record Point(int X, int Y); |
集合
来自 System.Collections.Generic 的泛型集合。
| 类型 | 用途与示例 |
|---|---|
List<T> | 动态数组:list.Add(1); list.Count; |
Dictionary<K, V> | 键值对:dict["a"] = 1; dict.ContainsKey("a"); |
HashSet<T> | 不重复的值:set.Add(5); set.Contains(5); |
Queue<T> | FIFO: q.Enqueue(x); q.Dequeue(); |
Stack<T> | LIFO: s.Push(x); s.Pop(); |
| 数组 | int[] nums = { 1, 2, 3 }; |
| 集合初始化器 | var l = new List<int> { 1, 2, 3 }; |
| 遍历字典 | foreach (var kv in dict) { kv.Key; kv.Value; } |
LINQ
用链式调用查询集合;来自 System.Linq。
| 操作 | 语法 |
|---|---|
| 筛选 | nums.Where(n => n > 0) |
| 投影 / 映射 | nums.Select(n => n * 2) |
| 排序 | nums.OrderBy(n => n) / OrderByDescending(...) |
| 第一个匹配项 | nums.First(n => n > 5) / FirstOrDefault(...) |
| Any / all | nums.Any(n => n < 0) / nums.All(n => n > 0) |
| 统计匹配数量 | nums.Count(n => n > 0) |
| 聚合 | nums.Sum(), nums.Max(), nums.Average() |
| 分组 | items.GroupBy(i => i.Category) |
| 立即求值(物化) | .ToList() / .ToArray() |
常用写法(属性、async)
| 写法 | 语法 |
|---|---|
| 异步方法 | async Task<int> GetAsync() { ... } |
| 等待任务 | var result = await GetAsync(); |
| Try / catch | try { ... } catch (Exception e) { ... } |
| Finally | finally { ... } 总会执行 |
| Using(释放资源) | using var file = File.OpenRead(path); |
| 字符串格式化 | $"Total: {amount:C}" |
| 泛型类 | class Box<T> { public T Value; } |
| 模式匹配 | if (obj is Dog d) { d.Bark(); } |
最常用的 C# 语法、集合和 LINQ 查询,全都在这一页。这份 C# 速查表是写 C# 时的快速参考:数据类型、流程控制、类、List/Dictionary 集合、LINQ,以及地道 .NET 代码里常见的属性和 async 写法。
这里的内容都是 .NET 上的标准 C#,可以用 dotnet CLI 运行。需要什么就复制什么,也可以在 C# 在线编辑器里直接运行任意代码片段,无需安装 SDK。
C# 速查表常见问题
这份 C# 速查表免费吗?
免费。这份 C# 速查表完全免费,无需注册。把它加入书签,需要查语法、集合或 LINQ 方法时随时回来看。
C# 中值类型和引用类型有什么区别?
值类型(
int、double、bool、struct、enum)直接保存数据,赋值或传给方法时会被复制,修改副本不会影响原值。引用类型(class、string、数组、List<T>)保存的是指向堆上数据的引用,所以两个变量可以指向同一个对象,通过其中一个做的修改,另一个也能看到。string 是引用类型,但它的行为是不可变的。LINQ 是什么?什么时候该用它?
LINQ(Language Integrated Query,语言集成查询)是一组方法,比如
Where、Select 和 OrderBy,让你用可读性强、可链式调用的写法来筛选、转换和聚合集合,而不必手写循环。凡是你本来要写循环来生成筛选后或投影后的列表时,都可以用 LINQ:它写法简洁,而且是延迟求值的,直到你调用 ToList() 或遍历时才会执行。可以在线练习 C# 吗?
可以。打开 C# 在线编辑器,就能在浏览器里运行这份速查表中的任意代码片段,无需安装 SDK。想系统地学,Coddy 免费的交互式 C# 课程会带你一步步从变量和循环学到类、集合和 LINQ。想用 C# 做游戏?C# Unity 课程通过能在浏览器里运行的 3D 游戏教你编写 Unity 脚本。
这份速查表适合初学者吗?
适合。内容从最常用的基础部分(类型、流程控制、方法)排到进阶内容(LINQ、async、泛型),第一天就能用上前面的部分,再慢慢掌握其余内容。