9818
Авторский канал по разработке на C# и Unity. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it РКН: https://clck.ru/3SBaT3 Реклама на бирже: https://telega.in/c/csharp_ready
❤️🔥"Это разъ*бный сетап, бро!" 😤
Так сказал мой друг из Африки, когда увидел этот стол)
Не знаю уж че за сетап, меня зовут Саша и качественную необычную мебель из натурального дерева я делаю уже больше 12-ти лет, столько же занимаюсь и темой здоровья.
Когда я услышал, что до 10% смертности связано с сидячим образом жизни, меня это поразило и я задался целью делать максимально функциональные и полезные рабочие пространства, ибо геморрой в 30 это конечно довольно нишево, но все же сомнительно 😂
Ну а собрать такой комплект под свои задачи и при этом сразу прикинуть цены вы можете в удобном Mini App конструкторе ➕
Теперь небольшую программу на C# можно запустить прямо из одного файла!
В этой статье:
• Как работают File-Based Apps в .NET 10
• Как запустить .cs-файл без создания отдельного проекта
• Каким способом подключать NuGet-пакеты и дополнительные настройки
• Когда такой формат удобен для скриптов, автоматизации и быстрых экспериментов
Получается знакомая простота скриптовых языков, но с возможностями C# и всей экосистемой .NET.
Продолжай читать на Habr!
FirstOrDefault() может вернуть null!
В C# часто ищут элемент в коллекции через LINQ:
var user = users.FirstOrDefault(u => u.Id == id);
null
Console.WriteLine(user.Name);
var user = users.FirstOrDefault(u => u.Id == id);
if (user is null)
{
return;
}
var user = users.FirstOrDefault(u => u.Id == id)
?? throw new InvalidOperationException("User not found");
Считаем количество заказов по статусам через LINQ!
Допустим, есть список заказов, и нужно быстро понять, сколько заказов находится в каждом статусе.
Создадим простую модель:
public record Order(string Status, decimal Amount);
var orders = new List<Order>
{
new("Paid", 1200m),
new("New", 500m),
new("Paid", 300m),
new("Cancelled", 100m)
};
var result = new Dictionary<string, int>();
foreach (var order in orders)
{
if (!result.ContainsKey(order.Status))
{
result[order.Status] = 0;
}
result[order.Status]++;
}
var result = orders
.GroupBy(order => order.Status)
.ToDictionary(g => g.Key, g => g.Count());
GroupBy() собирает заказы в группы по статусу.ToDictionary() превращает эти группы в словарь, где ключ это статус, а значение это количество заказов.Paid -> 2
New -> 1
Cancelled -> 1
Напоминалка по pattern matching в C#!
Например, case string s проверяет тип и сразу даёт переменную, а FileInfo { Extension: ".html" } позволяет матчить объект по его свойствам.
На картинке основные виды pattern matching: type pattern, property pattern, positional pattern, relational pattern и null pattern.
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
Почему для времени события часто лучше DateTimeOffset, а не DateTime?
В C# часто пишут так:
var createdAt = DateTime.Now;
var createdAt = DateTimeOffset.UtcNow;
Фильтруем пользователей по домену email через LINQ!
Допустим, у нас есть список пользователей, и нужно достать только email-адреса на gmail.com.
Создадим простую модель:
public record User(string Name, string Email);
var users = new List<User>
{
new("Alex", "alex@gmail.com"),
new("Maria", "maria@company.com"),
new("Bob", "bob@gmail.com")
};
var result = new List<string>();
foreach (var user in users)
{
if (user.Email.EndsWith("@gmail.com"))
{
result.Add(user.Email);
}
}
var result = users
.Select(user => user.Email)
.Where(email => email.EndsWith("@gmail.com"))
.ToList();
alex@gmail.com
bob@gmail.com
email.EndsWith(
"@gmail.com",
StringComparison.OrdinalIgnoreCase
)
🤔 .NET Mastery Hub — большая база знаний по .NET для разработчиков!
Этот репозиторий собрал в одном месте огромное количество полезных материалов по .NET. Удобно, что всё структурировано и разбито по темам, поэтому можно использовать его как для изучения, так и как справочник в работе. Особенно полезен тем, кто хочет разобраться в экосистеме .NET, закрыть пробелы в знаниях и лучше понимать, какие технологии и подходы используются в разработке.
Оставляю ссылочку: GitHub 📱
Напоминалка по async/await в C#!
Например, await не создаёт новый поток, а приостанавливает выполнение метода и освобождает текущий поток, пока операция не завершится.
На картинке краткая шпаргалка по async и await: зачем нужна асинхронность, какие бывают return-типы (Task, Task<T>), как работает state machine, чем отличается последовательный await от Task.WhenAll() и какие ошибки часто приводят к блокировкам.
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
👩💻 Разбираемся с dynamic — максимум гибкости без жёсткой типизации!
Он отключает проверки типов на этапе компиляции, позволяя вызывать методы и обращаться к свойствам без точного указания типа. Удобно, когда структура данных неизвестна заранее.
Что важно знать:
• Позволяет работать с JSON без создания классов.
• Подходит для COM-объектов и слабо типизированных API.
• Ошибки появляются только во время выполнения.
dynamic полезен, когда нужно быстро взаимодействовать с внешними данными или писать универсальный код.
Срезы коллекций — когда нужна часть, а лишнее не нужно!
Иногда требуется взять только кусок массива или строки: первые элементы, последние — или вырезать середину. Раньше ради этого писали Substring, Skip / Take и плодили лишние аллокации.
В C# 8 появились операторы диапазонов .. и индексов с конца ^, которые делают такие операции короче и нагляднее.
Создадим массив данных:
int[] data = { 10, 20, 30, 40, 50, 60 };int[] middle = data[1..3]; // {20, 30}int[] lastTwo = data[^2..]; // {50, 60}int[] withoutEdges = data[2..^2]; // {30, 40}string text = "Range & Index";
string word = text[^5..]; // "Index"
Range и Index делают код короче, читаемее и позволяют работать с Span<T> без копирования: меньше аллокаций — выше производительность!
📂 Напоминалка для работы со списками!
Например, Add() добавляет элемент в конец списка, а Contains() позволяет проверить наличие значения.
На картинке — основные методы List<T>, которые чаще всего используются в повседневной разработке.
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
✍️ Gizmo AI — нейросеть для обучения и запоминания информации!
AI-сервис, который помогает превращать заметки, PDF, статьи, видео и другие материалы в карточки для обучения и квизы. Нейросеть автоматически выделяет главное, генерирует вопросы и помогает быстрее запоминать информацию с помощью повторения и интерактивного формата обучения.
📌 Оставляю ссылочку: gizmo.ai
➡️ C# Ready | #сайт
📂 Шпаргалка по Server-Sent Events в ASP.NET Core и .NET 10!
Например, SSE позволяет серверу мгновенно отправлять обновления клиенту через обычный HTTP, а встроенный SSE API в .NET 10 упрощает реализацию realtime-уведомлений.
На картинке — краткая схема работы SSE: от простого endpoint до переподключения клиентов, replay событий и фильтрации пользователей.
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
👩💻 C# 13 без лишнего — быстро, чисто, понятно!В этой шпаргалке — как применять новые фичи языка в реальном коде, чтобы уменьшать аллокации, писать выразительнее и избегать скрытых ловушек при синхронизации и работе со стековыми типами.
➡️ C# Ready | #шпора
Почему технические строки не стоит сравнивать через ToLower()?
Для проверки логина, роли или кода часто пишут так:
if (role.ToLower() == "admin")
{
GrantAccess();
}
if (string.Equals(role, "admin", StringComparison.OrdinalIgnoreCase))
{
GrantAccess();
}
Почему технические строки не стоит сравнивать через ToLower()?
Для проверки логина, роли или кода часто пишут так:
if (role.ToLower() == "admin")
{
GrantAccess();
}
if (string.Equals(role, "admin", StringComparison.OrdinalIgnoreCase))
{
GrantAccess();
}
👩💻 Сегодня рассмотрим Channel<T> — безопасная асинхронная очередь задач в .NET
Это потокобезопасная очередь для передачи сообщений между задачами без ручных блокировок и сложной синхронизации.
Что важно знать:
• Работает без ручных блокировок и сложных синхронных вызовов.
• Позволяет автоматически замедлять отправку при перегрузке памяти.
• Обеспечивает плавную передачу данных между параллельными задачами.
🤖 ChatGPT в твоих руках: от вопроса до результата за минуту
ChatGPT всегда под рукой и готов помочь с работой, учёбой и повседневными задачами. Пока он берёт рутину на себя, у тебя остаётся больше времени на важное.
🤔 Но оформить подписку из России бывает непросто: нужны подходящий способ оплаты и дополнительные шаги.
😉 Не переживай, мы берём оформление на себя. Ты оформляешь заказ и предоставляешь необходимые данные, а мы активируем подписку за 5–15 минут. Иностранная карта и взаимодействие с платёжной системой OpenAI не потребуются.
💳 Оплата российской картой или через СБП
⚡️ Активация в течение 5–15 минут после получения необходимых данных
🔒 Поддержка на весь срок подписки и помощь при возникновении вопросов
⭐️ Более 3 лет опыта и 15 000+ выполненных заказов
👍 bookflow — полезные материалы для изучения различных языков!
На сайте собрана подборка полезных материалов для разработчиков, которые изучают C# и C++ и множество других языков. Здесь можно найти статьи, шпаргалки и обучающие ресурсы по основам синтаксиса, ООП, структурам данных, алгоритмам и ключевым концепциям разработки на этих языках.
📌 Оставляю ссылочку: bookflow.ru
➡️ C# Ready | #сайт
Напоминалка по исключениям в C#!
Например, NullReferenceException часто появляется при обращении к объекту, который равен null, а ArgumentNullException обычно используют, когда в метод передали обязательный аргумент без значения.
На картинке иерархия исключений в C#: Exception, SystemException, ApplicationException, ArgumentException, IOException и другие популярные типы ошибок.
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
Сидеть и работать в корпорации — страшно, жизнь-то мимо проходит. Уходить строить бизнес — страшно, а вдруг прогорит. Один из вариантов — разрабатывать свой пет-проект по вечерам. Многие успешные компании, например, Twitter, создавались именно так. Это не значит, что ваш проект обязательно заработает миллиарды, но заработать больше, чем в найме, и получить ценный опыт — вполне реально.
Перед началом разработки появляется множество вопросов, например:
• Как выбрать идею для пет-проекта?
• Что нужно знать про маркетинг
• Как запуститься и довести до первых продаж не имея бюджета на рекламу?
В телеграм-канале «Твой пет проект», Михаил Табунов делится своим опытом с разработчиками и менеджерами.
Он рассказывает, где искать идею для нового проекта, что нужно знать о маркетинге, как запустить стартап и привлечь первых 10 клиентов, а также о многих других важных вещах.
Подписывайтесь на «Твой пет проект», получайте пользу от практиков рынка!
/channel/+8Frwa03ciVlhNTky
👩💻 Разбираемся с lock — простой защита от гонок потоков и порчи общих данных!
Когда несколько потоков одновременно меняют одну переменную без синхронизации, результат становится непредсказуемым
Что важно знать:
• Оборачивай работу с разделяемым состоянием в lock (locker) { ... }
• Держи блокировку минимально короткой: никаких долгих операций, I/O или Thread.Sleep() внутри lock.
• Лишняя синхронизация превращается в узкое место производительности.
lock помогает писать стабильный и предсказуемый многопоточный код.
Почему IEnumerable лучше не перечислять несколько раз?IEnumerable<T> выглядит как обычная коллекция, но это может быть не список.
Это может быть LINQ-запрос, чтение из файла, генератор или результат из базы.
Например:
if (orders.Count() > 0)
{
foreach (var order in orders)
Process(order);
}
Count() может пройти всю последовательность.foreach пройдёт её ещё раз.var orderList = orders.ToList();
foreach.
🐱 Mapify — нейросеть, которая превращает любой текст в наглядную mind-map!
Если нужно быстро понять сложную тему, эта нейросеть автоматически превращает длинный текст, видео или статью в структурированную mind-map. Полезно для подготовки к экзаменам, изучения новой темы или планирования проектов.
📌 Оставляю ссылочку: mapify.so
➡️ C# Ready | #сайт
7 дней тест-драйва IT-профессии фронтенд-разработчик
7 дней и ты узнаешь, как попрощаться с рутиной и войти в индустрию, где тебя ждут интересные задачи и комьюнити единомышленников.
Почувствуй разницу:
До: Скучная рутина и «стеклянный потолок» в доходах.
После: Азарт от решения задач и старт с 50 000 руб. уже через месяц с возможным ростом
до 200 000 руб.
До: Постоянная стагнация и страх перед завтрашним днем.
После: Стремительный профрост и востребованность на рынке.
Роман Чернов, фронтенд-разработчик с 12-летним стажем, берет тебя в ученики на 7-дневный тест-драйв.
Ты не будешь просто слушать, ты создашь за неделю проект стоимостью 20 000 руб.:
1. Верстка: С нуля соберешь стильный веб-сайт на HTML + CSS.
2. Интерактив: «Оживишь» его анимацией и функционалом.
3. Запуск: подключишь backend и выложишь готовый продукт в интернет.
Итог: готовый проект в портфолио, понимание рынка и навыки, которые делают тебя востребованным специалистом. Даже если ты впервые слышишь про HTML.
👉 Ухватить обучение бесплатно
Набор открыт до 24.06.
👩💻 Разберем switch-выражения — компактнее и выразительнее!
С выходом C# 8 появился новый способ писать условия декларативно и лаконично.
Что важно знать:
• Возвращает результат без лишних строк в вашем коде.
• Упрощает обработку разных вариантов данных в одном месте.
• Обеспечивает явную проверку и надёжность кода при изменениях.
record — удобно создаём типы для хранения данных!
Иногда нужно создать класс, который просто хранит данные: имя, возраст, email или другие значения.
Обычно для этого пишут обычный класс:
class User
{
public string Name { get; set; }
public int Age { get; set; }
public User(string name, int age)
{
Name = name;
Age = age;
}
}
record, чтобы описывать такие типы короче:csharp id="svqk8g"
using System;
record User(string Name, int Age);
csharp id="m79oqr"
User user = new User("Анна", 25);
Console.WriteLine(user);
csharp id="ww9ua2"
User { Name = Анна, Age = 25 }
record особенно удобен для моделей, где важны сами данные, а не сложное поведение объекта.record помогает писать короче и удобнее, когда тип нужен в первую очередь для хранения данных
🤓 Шпаргалка по Git — всё самое важное в одном месте!
На картинке — компактная визуальная памятка по основным командам Git и их логике работы: создание и клонирование репозитория, отслеживание изменений, работа с ветками, обновление данных, просмотр истории, откаты и разрешение конфликтов.
Сохрани, чтобы быстрее ориентироваться в Git и не путаться в командах при работе с проектами.
➡️ C# Ready | #ресурс
📂 Как выбрать cloud database и не утонуть в вариантах?
В облаках есть разные классы баз: relational, key-value, document, wide-column, graph, time-series, search и analytical databases. У каждой модели свои сильные стороны: транзакции, скорость чтения, горизонтальное масштабирование, гибкая схема или аналитические запросы.
На картинке - сравнение облачных database-сервисов и близких open-source альтернатив.
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс