Menu
CoddyTech

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 */

数据类型

类型说明
int32 位有符号整数
long64 位有符号整数
double / float浮点数
decimal高精度小数(适合金额)
booltrue 或 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 / elseif (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 / continuebreak; 跳出循环,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 / allnums.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 / catchtry { ... } catch (Exception e) { ... }
Finallyfinally { ... } 总会执行
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、泛型),第一天就能用上前面的部分,再慢慢掌握其余内容。

Coddy 编程语言插图

在 Coddy 学习 C#

开始