9818
Авторский канал по разработке на C# и Unity. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it РКН: https://clck.ru/3SBaT3 Реклама на бирже: https://telega.in/c/csharp_ready
Почему Count читается лучше, чем Count()?
Когда у нас уже есть конкретная коллекция, например List<T> или массив, количество элементов можно получить напрямую через свойство. В таком случае запись через Count() выглядит чуть тяжелее, чем нужно.
Например, здесь:
if (users.Count() > 0)
{
SendPromo(users);
}
if (users.Count > 0)
{
SendPromo(users);
}
if, валидации, guard-условиях и любой повседневной бизнес-логике.IEnumerable<T>, то свойства Count у него может не быть, и это уже другая ситуация.
👩💻 Генерация случайностей на любой вкус — от int до байтов и double!Random в C# — это гибкий инструмент для генерации случайных данных: от чисел до байтов. Особенно важен при работе с многопоточностью.
➡️ C# Ready | #шпора
Почему var иногда читается лучше, чем явный тип?
Когда тип и так очевиден из правой части выражения, его повторение слева не добавляет пользы.
Наоборот — строка становится тяжелее, и глазу приходится дважды считывать одну и ту же информацию.
Например, здесь:
Dictionary<string, List<User>> usersByRole = new Dictionary<string, List<User>>();
var usersByRole = new Dictionary<string, List<User>>();
var хорошо работает именно там, где тип очевиден сразу.var везде, а в том, чтобы убирать лишний визуальный шум там, где он не нужен.
Почему string.IsNullOrWhiteSpace() лучше, чем несколько проверок подряд?
Когда нужно понять, что строка пустая или не заполнена, ручные проверки быстро делают условие шумным.
При чтении приходится разбирать детали: null, пустая строка, сравнения, операторы ||.
Например, такой код:
if (name == null || name == "")
{
return;
}
if (string.IsNullOrWhiteSpace(name))
{
return;
}
yield return — возвращаем значения по одному, а не всё сразу!
Иногда нужно получить последовательность данных шаг за шагом, не создавая сразу целую коллекцию в памяти.
Обычный подход — сначала собрать список, а потом вернуть его:
List<int> GetNumbers()
{
var numbers = new List<int>();
for (int i = 1; i <= 5; i++)
{
numbers.Add(i);
}
return numbers;
}
yield return, чтобы возвращать элементы по одному:IEnumerable<int> GetNumbers()
{
for (int i = 1; i <= 5; i++)
{
yield return i;
}
}
foreach (var number in GetNumbers())
{
Console.WriteLine(number);
}
1
2
3
4
5
yield return удобен, когда нужно лениво генерировать данные и не хранить всё сразу в памяти
Почему nameof() лучше, чем строка, написанная руками?
Когда имя параметра или свойства передаётся обычной строкой, код становится более хрупким.
На первый взгляд всё выглядит нормально, но у такого подхода есть слабое место: строка никак не связана с самим кодом.
Например:
throw new ArgumentNullException("user");user, проблем нет.currentUser, строка останется старой. В итоге код уже изменился, а текст внутри исключения — нет.nameof():throw new ArgumentNullException(nameof(user));
☕️ Programm․top — это образовательная платформа с теоретическими материалами, примерами и задачами!Здесь вы найдёте базовые руководства по синтаксису языка, работу с переменными, операциями, массивами и строками, основы ООП, алгоритмы, структуры данных, а также практические задания и готовые программы для отработки навыков.
📌 Оставляю ссылочку: programm.top
➡ C# Ready | #ресурс
❤️ Нашёл отличную статью на Хабре — подробное пошаговое руководство по созданию Telegram-бота-мессенджера на C#.
В этой статье:• Подготовка базы данных PostgreSQL и настройка миграций EF Core• Проектирование моделей данных и сервисных методов обмена сообщениями• Реализация клавиатур и inline-кнопок для удобного интерфейса бота
🟡 Рекомендую прочитать на Habr!
📂 Шпаргалка по вычислительным архитектурам!
Например, CPU хорошо справляется с логикой, ветвлениями и задачами с низкой задержкой. GPU — про массовый параллелизм: подходит для обработки больших массивов данных, графики и вычислений.
На картинке — наглядное сравнение архитектуры, модели вычислений и типичных сценариев применения для каждого типа процессоров.
Сохрани, чтобы не потерять!
➡ C# Ready | #ресурс
😍 PVS-Studio Blog — технические статьи по коду и разработке!
Здесь публикуются подробные разборы ошибок, уязвимостей и практик разработки. Основной фокус на статический анализ кода и реальные кейсы из проектов, включая разборы популярных open-source решений. Блог активно покрывает C++ и C#: публикуются статьи по анализу, поиску багов, особенностям работы компиляторов и практике.
📌 Оставляю ссылочку: pvs-studio.ru
➡️ C# Ready | #сайт
На Stepik добавили курс «Linux с нуля»
Этот курс закрывает всю обязательную Linux-базу для работы в IT. Подойдёт для:
- разработчиков
- девопсов и админов
- специалистов по данным и ML
- специалистов поддержки и сопровождения
- тестировщиков и безопасников
READY30»: открыть курс на Stepik
Читать полностью…
Collection expressions в C# 12: собираем коллекции без AddRange и Concat!
Часто нужно взять базовую коллекцию и добавить пару значений в начало или конец. Обычно для этого появляются AddRange, временные списки и много шума в коде.
Раньше приходилось собирать вручную:
var baseIds = new[] { 1, 2, 3 };
var ids = new List<int>();
ids.AddRange(baseIds);
ids.Add(10);
ids.Add(20);
var result = ids.ToArray();
Console.WriteLine(string.Join(", ", result));int[] baseIds = [1, 2, 3];
int[] result = [..baseIds, 10, 20];
Console.WriteLine(string.Join(", ", result));
..baseIds означает “вставь все элементы baseIds на это место”.
👍 OverAPI — огромная база шпаргалок для программистов!
Здесь можно быстро найти краткие справочники по синтаксису, командам и ключевым возможностям разных языков, чтобы не тратить время на долгий поиск документации. На сайте есть подробные шпаргалки по C++ и C#: быстрые справочники по синтаксису, контейнерам, алгоритмам STL, .NET и другим вещам, которые постоянно используются в разработке.
📌 Оставляю ссылочку: overapi.com
➡️ C# Ready | #сайт
Требуются парни и девушки в возрасте 19–40 лет, желающие работать в сфере IT.
Опыт в программировании не нужен.
Завтра запускаем бесплатный онлайн-интенсив по Frontend-разработке, где будем показывать, как разрабатывать сайты и веб-приложения используя ИИ.
За 7 дней обучения без опыта ты:
1. Сделаешь реальный сайт сервиса доставки с нуля;
2. Добавишь JavaScript-логику, расчёты и трекинг;
3. Подключишь карты и маршрут доставки через API;
4. Превратишь сайт в Angular-приложение;
5. Подключишь backend и выложишь проект в продакшен;
6. Научишься использовать ChatGPT и Giga во Frontend-разработке;
7. Узнаешь 9 способов найти первый заказ на фрилансе даже без опыта.
А главное, ты увидишь, что разрабатывать сайты и приложения не так сложно, как кажется. И поймёшь, как тебе развиваться в этой профессии, чтобы уже через пару месяцев зарабатывать от 1000$ на вёрстке сайтов.
👉 Проскочить на интенсив бесплатно
🔥 С 2019 стабильно помогаем с обучением, практикой, зарабатывать на фрилансе и проходить собеседования.
Почему init безопаснее, чем публичный set?
С set состояние объекта можно менять из любого места в коде. Объект создаётся в одном месте, но через время может быть случайно изменён в другом — и отследить источник проблемы становится сложнее.
public class User
{
public string Name { get; set; }
}
user.Name = "Bob"; // можно изменить когда угодно
init разрешает задать значение только в момент создания объекта. После этого свойство становится только для чтения, и состояние объекта остаётся стабильным.public class User
{
public string Name { get; init; }
}
var user = new User { Name = "Alex" };
user.Name = "Bob"; // ошибка
init — простой способ защитить состояние объекта и уменьшить риск случайных изменений.
📂 Напоминалка для работы с OOP Design Patterns!
Например, Factory помогает делегировать создание объектов, а Observer — удобно реализовать систему подписок и событий.
На картинке — 9 самых нужных паттернов, которые часто встречаются в реальных проектах и архитектуре.
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
☕️ Нашёл годную статью — экспресс-введение в Avalonia UI, создание кроссплатформенного калькулятора на ․NET.
В этой статье:• Базовая подготовка: dotnet new + VS Code, установка шаблонов Avalonia• Разметка интерфейса на Grid и биндинги MVVM через ReactiveUI• Стилизация: от локальных сеттеров до готовой Material-темы
🟡 Рекомендую прочитать на Habr!
❤️ Booldev — годная шпаргалка по C# и .NET!
Здесь собраны основные конструкции языка и типовые задачи, с которыми сталкиваются разработчики. Материал ориентирован на практику, показаны частые проблемы и подходы к их решению, что делает его удобным как быстрый справочник.
📌 Оставляю ссылочку: bool.dev
➡️ C# Ready | #сайт
🐱 Project-Based Learning — обучение через проекты!
Этот репозиторий собирает лучшие гайды, где вместо теории — реальные проекты, которые можно реализовать с нуля. Внутри есть десятки идей. В разделах по C++ и C# можно найти идеи разного уровня: работа с файлами, сетевое взаимодействие, графика, многопоточность и др. задачи.
Оставляю ссылочку: GitHub 📱
📂 Напоминалка по иерархии памяти и работе storage!
Например, регистры — это самый быстрый уровень памяти внутри CPU, кэш (L1/L2/L3) снижает latency за счёт локальности данных, RAM хранит рабочее состояние приложений, а SSD/HDD используются для персистентного хранения с существенно более высоким временем доступа.
На картинке — базовая иерархия памяти, взаимодействие CPU — cache — RAM — disk, а также упрощённая модель работы HDD и архитектура SSD.
Сохрани, чтобы не потерять!
➡ C# Ready | #ресурс
Регулярные выражения — полезная вещь, которую часто используют разработчики. Но за удобством скрываются риски.
Разберем их на вебинаре «Подводные камни регулярных выражений: катастрофический возврат, ReDoS-атаки и выявление уязвимостей». C# разработчик PVS-Studio Георгий Тормозов расскажет, как обычные регулярные выражения могут привести к уязвимостям, замедлить работу приложения и даже открыть путь для ReDoS-атак. Эксперт объяснит, почему это происходит и как это влияет на безопасность.
А девелопер-адвокат Глеб Асламов познакомит с инструментом, который помогает находить потенциально опасные регулярные выражения еще на этапе разработки. Спикер расскажет, как работает инструмент, чем он может быть полезен программистам и специалистам по безопасности.
🗓 Когда: 30 апреля в 16:00
Регистрируйтесь на вебинар по ссылке.
Подписывайтесь на PVS-Studio, чтобы всегда оставаться в курсе последних новостей
📱Telegram
📱MAX
Обрабатываем пары значений с tuple-паттернами в switch!
Часто в коде нужно принимать решение сразу по нескольким переменным. Например, по координатам точки — находится ли она в начале координат, на осях или в другой области.
Раньше такую логику реализовывали через цепочку if-ов:
if (x == 0 && y == 0)
return "Начало координат";
else if (x == 0)
return "На оси Y";
else if (y == 0)
return "На оси X";
else
return "Другая точка";
switch с tuple-паттернами:return (x, y) switch
{
(0, 0) => "Начало координат",
(0, _) => "На оси Y",
(_, 0) => "На оси X",
_ => "Другая точка"
};
👩💻 Познакомимся с методами Encoding — инструментом для конвертации строк в байты и обратно!Они позволяют точно контролировать размер данных, корректно работать с различными кодировками и обеспечивать потоковую обработку текста без потери информации.
➡️ C# Ready | #шпора
Dictionary<TKey, TValue> — быстрый доступ к данным по ключу
Иногда нужно хранить данные так, чтобы быстро находить значение не по индексу, а по ключу.
Например, у нас есть набор пользователей и их возрастов.
Если хранить это в массиве или списке, поиск будет менее удобным.
В C# для таких задач используется Dictionary<TKey, TValue>:
using System;
using System.Collections.Generic;
Dictionary<string, int> ages = new Dictionary<string, int>
{
["Анна"] = 25,
["Игорь"] = 31,
["Мария"] = 28
};
Console.WriteLine(ages["Игорь"]);
string — тип ключа,int — тип значения."Игорь" и сразу получаем его возраст.31
Dictionary удобно использовать, когда нужно быстро получать данные по имени, id, коду или любому другому ключу
👩💻 string vs StringBuilder без лишней магии!В этой шпаргалке — наглядно и по делу: когда обычная строка подходит идеально, а когда она начинает незаметно создавать кучу лишних объектов и тормозить код.
➡️ C# Ready | #шпора
🐱 Отличная статья — про то, как перейти на Minimal API в ASP․NET Core без лишней боли!
В этой статье:• Разберёшься, чем Minimal API отличается от привычных контроллеров и где он действительно удобнее;• Поймёшь, какие плюсы даёт такой подход в реальном проекте, а где могут всплыть ограничения;• Посмотришь на практические нюансы миграции и поймёшь, стоит ли переходить на него в своём коде.
🔊 Продолжай читать на Habr!
Как меняется роль разработчика в 2026 году?
24 марта Mindbox проведет дебаты: эксперты по AI из SberDevices и Itsy обсудят, куда движутся технологии с AI и ответят на вопросы зрителей.
Зачем приходить
— узнать про подходы к AI с двух сторон: бизнес и разработка;
— спросить о том, что волнует, и обсудить все в чате дебатов;
— забрать идеи, которые работают у других, и поделиться своим опытом.
Подключайся и готовь вопросы!
Канал Сергея Маркова
Канал Никиты Архипова
📅 24 марта
⏰ 19:00–20:30 мск
📍 Онлайн, бесплатно
👉 Зарегистрироваться
Реклама ООО "Майндбокс". ИНН: 7713688880
Collection expressions в C# 12: собираем коллекции без AddRange и Concat!
Часто нужно взять базовую коллекцию и добавить пару значений в начало или конец. Обычно для этого появляются AddRange, временные списки и много шума в коде.
Раньше приходилось собирать вручную:
var baseIds = new[] { 1, 2, 3 };
var ids = new List<int>();
ids.AddRange(baseIds);
ids.Add(10);
ids.Add(20);
var result = ids.ToArray();
Console.WriteLine(string.Join(", ", result));int[] baseIds = [1, 2, 3];
int[] result = [..baseIds, 10, 20];
Console.WriteLine(string.Join(", ", result));
..baseIds означает “вставь все элементы baseIds на это место”.
💡 Uizard — нейросеть для быстрого создания интерфейсов!
Это AI-инструмент для прототипирования UI/UX. Достаточно описать идею сайта или приложения, и нейросеть автоматически создаст структуру интерфейса. Также можно загрузить набросок или скриншот — AI преобразует его в редактируемый макет. Подходит для быстрого создания прототипов и лендингов без длительной работы в дизайнерских редакторах.
📌 Оставляю ссылочку: uizard.io
➡️ C# Ready | #ресурс
❤️ Нашёл годную статью — создание Telegram-бота с пошаговой настройкой и практическими примерами!
В этой статье:• Регистрация бота через BotFather и получение токена• Настройка клиента, запуск получения обновлений и обработка сообщений• Обработка различных типов Update — сообщения, кнопки, опросы и другое
🟡 Рекомендую прочитать на Habr!