Hello World và cấu trúc chương trình
Câu lệnh cấp cao nhất (top-level statement, từ .NET 6) giúp bạn bỏ qua lớp khai báo rườm rà.
| Thành phần | Code |
|---|
| Chương trình top-level | Console.WriteLine("Hello, World!"); |
| Nhập một namespace | using System; |
| Điểm bắt đầu kiểu truyền thống | static void Main(string[] args) { ... } |
| In một dòng | Console.WriteLine("text"); |
| Đọc một dòng | string s = Console.ReadLine(); |
| Nội suy chuỗi | Console.WriteLine($"Hi {name}"); |
| Chú thích | // line và /* block */ |
Kiểu dữ liệu
| Kiểu | Mô tả |
|---|
int | Số nguyên có dấu 32 bit |
long | Số nguyên có dấu 64 bit |
double / float | Số thực dấu phẩy động |
decimal | Số thập phân độ chính xác cao (tiền tệ) |
bool | true hoặc false |
char | Một ký tự Unicode |
string | Chuỗi bất biến |
var | Trình biên dịch tự suy ra kiểu |
int? | Kiểu giá trị có thể null |
Biến
| Thao tác | Cú pháp |
|---|
| Khai báo và khởi tạo | int x = 5; |
| Suy luận kiểu | var name = "Ada"; |
| Hằng số | const double Pi = 3.14159; |
| Trường chỉ đọc | readonly int id; |
| Kiểu tham chiếu có thể null | string? maybe = null; |
| Toán tử gộp null | var y = maybe ?? "default"; |
| Toán tử điều kiện null | int? len = text?.Length; |
Luồng điều khiển
| Câu lệnh | Cú pháp |
|---|
| If / else | if (x > 0) { ... } else { ... } |
| Câu lệnh switch | switch (n) { case 1: ...; break; default: ...; } |
| Biểu thức switch | var s = n switch { 1 => "one", _ => "other" }; |
| Vòng lặp while | while (i < n) { ... } |
| Vòng lặp do-while | do { ... } while (i < n); |
| Vòng lặp for | for (int i = 0; i < n; i++) { ... } |
| Vòng lặp foreach | foreach (var item in list) { ... } |
| Break / continue | break; thoát khỏi vòng lặp, continue; chuyển sang lần lặp tiếp theo |
Phương thức
| Thao tác | Cú pháp |
|---|
| Định nghĩa phương thức | int Add(int a, int b) { return a + b; } |
| Thân biểu thức | int Add(int a, int b) => a + b; |
| Không có giá trị trả về | void Greet() { ... } |
| Tham số tùy chọn | int Pow(int b, int e = 2) { ... } |
| Đối số có tên | Pow(b: 2, e: 3); |
| Tham số out | bool TryParse(string s, out int n) { ... } |
| Phương thức static | static int Square(int x) => x * x; |
| Biểu thức lambda | Func<int, int> f = x => x * 2; |
Lớp và OOP
| Thao tác | Cú pháp |
|---|
| Định nghĩa lớp | class Dog { ... } |
| Auto property | public string Name { get; set; } |
| Property chỉ đọc | public int Id { get; } |
| Hàm khởi tạo | public Dog(string name) { Name = name; } |
| Tạo đối tượng | var d = new Dog("Rex"); |
| Kế thừa | class Puppy : Dog { ... } |
| Interface | interface IRunnable { void Run(); } |
| Ghi đè phương thức | public override void Speak() { ... } |
| Record (bất biến) | record Point(int X, int Y); |
Collection
Các collection generic từ System.Collections.Generic.
| Kiểu | Công dụng và ví dụ |
|---|
List<T> | Mảng động: list.Add(1); list.Count; |
Dictionary<K, V> | Cặp khóa và giá trị: dict["a"] = 1; dict.ContainsKey("a"); |
HashSet<T> | Các giá trị duy nhất: set.Add(5); set.Contains(5); |
Queue<T> | FIFO: q.Enqueue(x); q.Dequeue(); |
Stack<T> | LIFO: s.Push(x); s.Pop(); |
| Mảng | int[] nums = { 1, 2, 3 }; |
| Khởi tạo collection | var l = new List<int> { 1, 2, 3 }; |
| Duyệt qua dictionary | foreach (var kv in dict) { kv.Key; kv.Value; } |
LINQ
Truy vấn collection một cách gọn gàng; từ System.Linq.
| Thao tác | Cú pháp |
|---|
| Lọc | nums.Where(n => n > 0) |
| Chiếu / ánh xạ | nums.Select(n => n * 2) |
| Sắp xếp | nums.OrderBy(n => n) / OrderByDescending(...) |
| Phần tử khớp đầu tiên | nums.First(n => n > 5) / FirstOrDefault(...) |
| Có bất kỳ / tất cả | nums.Any(n => n < 0) / nums.All(n => n > 0) |
| Đếm số phần tử khớp | nums.Count(n => n > 0) |
| Tổng hợp | nums.Sum(), nums.Max(), nums.Average() |
| Nhóm theo | items.GroupBy(i => i.Category) |
| Chuyển thành danh sách hoặc mảng | .ToList() / .ToArray() |
Mẫu thường dùng (property, async)
| Mẫu | Cú pháp |
|---|
| Phương thức async | async Task<int> GetAsync() { ... } |
| Chờ một task | var result = await GetAsync(); |
| Try / catch | try { ... } catch (Exception e) { ... } |
| Finally | finally { ... } luôn được chạy |
| Using (giải phóng tài nguyên) | using var file = File.OpenRead(path); |
| Định dạng chuỗi | $"Total: {amount:C}" |
| Lớp generic | class Box<T> { public T Value; } |
| Khớp mẫu (pattern matching) | if (obj is Dog d) { d.Bark(); } |
Cú pháp C#, các collection và truy vấn LINQ mà bạn cần nhiều nhất, gom trong một trang. Cheat sheet C# này là bảng tra cứu nhanh khi viết C#: kiểu dữ liệu, luồng điều khiển, lớp, các collection List/Dictionary, LINQ, cùng các mẫu property và async làm nên code .NET chuẩn mực.
Mọi thứ ở đây đều là C# chuẩn trên .NET và chạy được bằng dotnet CLI. Sao chép phần bạn cần, hoặc chạy thử bất kỳ đoạn code nào ngay trong playground C#, không cần cài SDK.