Шпаргалка по C#
Синтаксис C#, коллекции и запросы LINQ, которые нужны чаще всего, — на одной странице. Всё это стандартный C# на .NET.
Любой пример можно запустить в компиляторе — без установки SDK и Visual Studio.
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}"); |
| Комментарии | // строка и /* блок */ |
C#
using System;
class Program
{
static void Main(string[] args)
{
Console.Write("Как вас зовут? ");
string name = Console.ReadLine();
Console.WriteLine($"Привет, {name}!");
}
}Типы данных
| Тип | Описание |
|---|---|
int |
32-битное знаковое целое |
long |
64-битное знаковое целое |
double / float |
Числа с плавающей точкой |
decimal |
Десятичный тип высокой точности (деньги) |
bool |
true или false |
char |
Один символ Unicode |
string |
Неизменяемый текст |
var |
Компилятор выводит тип сам |
int? |
Значимый тип, допускающий null |
Диапазоны целых: byte 0…255, short ±32 767, int ±2,1 млрд,
long ±9,2 ⋅ 10¹⁸.
Переменные
| Операция | Синтаксис |
|---|---|
| Объявить и инициализировать | int x = 5; |
| Вывод типа | var name = "Ada"; |
| Константа | const double Pi = 3.14159; |
| Поле только для чтения | readonly int id; |
| Ссылка, допускающая null | string? maybe = null; |
| Объединение с null | var y = maybe ?? "default"; |
| Условный доступ при null | int? len = text?.Length; |
| Преобразование типа | int n = int.Parse("42"); / Convert.ToDouble(s) |
C#
int a = 10, b = 3;
double d = 2.5;
bool ok = a > b && b != 0;
string label = $"a / b = {a / b}, остаток {a % b}";
Console.WriteLine(label); // a / b = 3, остаток 1
Console.WriteLine(d / 2); // 1.25
Console.WriteLine(ok); // TrueУправление потоком
| Конструкция | Синтаксис |
|---|---|
| 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; — следующая итерация |
C#
for (int i = 1; i <= 10; i++)
{
if (i % 2 != 0) continue; // пропустить нечётные
if (i > 8) break; // выйти из цикла
Console.WriteLine(i); // 2, 4, 6, 8
}Методы
| Операция | Синтаксис |
|---|---|
| Определить метод | 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; |
| Лямбда-выражение | Func<int, int> f = x => x * 2; |
| Рекурсия | int Fact(int n) => n <= 1 ? 1 : n * Fact(n - 1); |
C#
static int Gcd(int a, int b) => b == 0 ? a : Gcd(b, a % b);
Console.WriteLine(Gcd(48, 18)); // 6Классы и ООП
| Операция | Синтаксис |
|---|---|
| Определить класс | 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 (неизменяемый) | record Point(int X, int Y); |
C#
class Animal
{
public string Name { get; set; }
public Animal(string name) => Name = name;
public virtual string Speak() => "...";
}
class Cat : Animal
{
public Cat(string name) : base(name) { }
public override string Speak() => "Мяу";
}
var cat = new Cat("Барсик");
Console.WriteLine($"{cat.Name}: {cat.Speak()}");Коллекции
Обобщённые коллекции из 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; } |
C#
var marks = new Dictionary<string, int>
{
["Анна"] = 5,
["Иван"] = 4,
};
marks["Пётр"] = 3;
foreach (var pair in marks)
Console.WriteLine($"{pair.Key}: {pair.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() |
C#
using System.Linq;
var nums = new[] { 5, -2, 9, 0, 7, 3 };
var result = nums
.Where(n => n > 0)
.OrderByDescending(n => n)
.Select(n => n * n)
.ToList();
Console.WriteLine(string.Join(", ", result)); // 81, 49, 25, 9
Console.WriteLine(nums.Sum()); // 22Частые паттерны (свойства, 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(); } |
Строки
| Операция | Пример |
|---|---|
| Длина | s.Length |
| Верхний / нижний регистр | s.ToUpper(), s.ToLower() |
| Обрезка пробелов | s.Trim() |
| Замена | s.Replace("a", "b") |
| Разбиение | s.Split(' ') |
| Соединение | string.Join(", ", parts) |
| Поиск подстроки | s.Contains("abc"), s.IndexOf("a") |
| Срез | s.Substring(1, 3) или s[1..4] |
| Сравнение без учёта регистра | string.Equals(a, b, StringComparison.OrdinalIgnoreCase) |
Что дальше
- Шпаргалка по алгоритмическому языку — те же темы на КуМире.
- Компилятор C# — проверить любой пример вживую.