csharp_ready | Unsorted

Telegram-канал csharp_ready - C# Ready | Unity

9818

Авторский канал по разработке на C# и Unity. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it РКН: https://clck.ru/3SBaT3 Реклама на бирже: https://telega.in/c/csharp_ready

Subscribe to a channel

C# Ready | Unity

Почему Count читается лучше, чем Count()?

Когда у нас уже есть конкретная коллекция, например List<T> или массив, количество элементов можно получить напрямую через свойство. В таком случае запись через Count() выглядит чуть тяжелее, чем нужно.

Например, здесь:

if (users.Count() > 0)
{
SendPromo(users);
}


формально всё работает, но при чтении возникает лишний вопрос: зачем здесь LINQ-метод, если коллекция и так уже известна?

Гораздо проще воспринимается такой вариант:
if (users.Count > 0)
{
SendPromo(users);
}


Здесь код читается прямолинейно: у коллекции есть количество элементов, мы его и проверяем.

Это особенно актуально в местах, где важна простота чтения: в if, валидации, guard-условиях и любой повседневной бизнес-логике.

Важно только помнить: такой подход подходит именно тогда, когда тип коллекции уже известен.

Если перед вами IEnumerable<T>, то свойства Count у него может не быть, и это уже другая ситуация.

🔥Маленькая замена, а код выглядит чище и естественнее уже с первого взгляда.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

👩‍💻 Генерация случайностей на любой вкус — от int до байтов и double!

Random в C# — это гибкий инструмент для генерации случайных данных: от чисел до байтов. Особенно важен при работе с многопоточностью.

➡️ C# Ready | #шпора

Читать полностью…

C# Ready | Unity

Почему var иногда читается лучше, чем явный тип?

Когда тип и так очевиден из правой части выражения, его повторение слева не добавляет пользы.
Наоборот — строка становится тяжелее, и глазу приходится дважды считывать одну и ту же информацию.

Например, здесь:

Dictionary<string, List<User>> usersByRole = new Dictionary<string, List<User>>();


код формально понятный, но перегруженный.
Тип уже явно указан в момент создания объекта, поэтому повтор слева только делает запись длиннее.

Гораздо проще читается такой вариант:
var usersByRole = new Dictionary<string, List<User>>();


Здесь внимание уходит не на длинное имя типа, а на сам смысл переменной.
Код выглядит легче, чище и быстрее считывается.

Важно: var хорошо работает именно там, где тип очевиден сразу.
Если по правой части непонятно, что лежит в переменной, явный тип может быть полезнее.

🔥 То есть идея не в том, чтобы писать var везде, а в том, чтобы убирать лишний визуальный шум там, где он не нужен.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

Почему string.IsNullOrWhiteSpace() лучше, чем несколько проверок подряд?

Когда нужно понять, что строка пустая или не заполнена, ручные проверки быстро делают условие шумным.
При чтении приходится разбирать детали: null, пустая строка, сравнения, операторы ||.

Например, такой код:

if (name == null || name == "")
{
return;
}


работает, но читается не так просто, как мог бы.
Сразу приходится смотреть, какие именно случаи мы проверяем и не забыли ли что-то по пути.

Гораздо понятнее выглядит такой вариант:
if (string.IsNullOrWhiteSpace(name))
{
return;
}


Здесь намерение видно сразу: строка не содержит нормального значения.
Не нужно вчитываться в детали условия — метод уже говорит всё за нас.

Особенно полезно это в валидации, обработке ввода, DTO, командах и любых местах, где строка приходит извне и может оказаться пустой или состоять только из пробелов.

🔥 Маленькая замена, а условие становится заметно легче для чтения.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

yield return — возвращаем значения по одному, а не всё сразу!

Иногда нужно получить последовательность данных шаг за шагом, не создавая сразу целую коллекцию в памяти.

Обычный подход — сначала собрать список, а потом вернуть его:

List<int> GetNumbers()
{
var numbers = new List<int>();

for (int i = 1; i <= 5; i++)
{
numbers.Add(i);
}

return numbers;
}


Такой код работает, но сначала создаётся весь список целиком.

В C# можно использовать 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 удобен, когда нужно лениво генерировать данные и не хранить всё сразу в памяти

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

Почему nameof() лучше, чем строка, написанная руками?

Когда имя параметра или свойства передаётся обычной строкой, код становится более хрупким.
На первый взгляд всё выглядит нормально, но у такого подхода есть слабое место: строка никак не связана с самим кодом.

Например:

throw new ArgumentNullException("user");


Пока параметр действительно называется user, проблем нет.
Но если позже кто-то переименует его, например в currentUser, строка останется старой. В итоге код уже изменился, а текст внутри исключения — нет.

Гораздо надёжнее использовать nameof():
throw new ArgumentNullException(nameof(user));


В этом случае имя берётся прямо из кода.
Если параметр переименуют, выражение тоже обновится при рефакторинге, и код останется корректным.

По сути, это простая привычка, которая помогает избежать мелких, но неприятных ошибок при изменениях в коде.

🔥 Маленькая деталь, а код становится надёжнее и лучше переживает рефакторинг.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

☕️ Programm․top — это образовательная платформа с теоретическими материалами, примерами и задачами!

Здесь вы найдёте базовые руководства по синтаксису языка, работу с переменными, операциями, массивами и строками, основы ООП, алгоритмы, структуры данных, а также практические задания и готовые программы для отработки навыков.

📌 Оставляю ссылочку: programm.top

➡ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

❤️ Нашёл отличную статью на Хабре — подробное пошаговое руководство по созданию Telegram-бота-мессенджера на C#.

В этой статье:
• Подготовка базы данных PostgreSQL и настройка миграций EF Core
• Проектирование моделей данных и сервисных методов обмена сообщениями
• Реализация клавиатур и inline-кнопок для удобного интерфейса бота

🟡 Рекомендую прочитать на Habr!


➡️ C# Ready | #статья

Читать полностью…

C# Ready | Unity

📂 Шпаргалка по вычислительным архитектурам!

Например, CPU хорошо справляется с логикой, ветвлениями и задачами с низкой задержкой. GPU — про массовый параллелизм: подходит для обработки больших массивов данных, графики и вычислений.

На картинке — наглядное сравнение архитектуры, модели вычислений и типичных сценариев применения для каждого типа процессоров.

Сохрани, чтобы не потерять!

➡ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

😍 PVS-Studio Blog — технические статьи по коду и разработке!

Здесь публикуются подробные разборы ошибок, уязвимостей и практик разработки. Основной фокус на статический анализ кода и реальные кейсы из проектов, включая разборы популярных open-source решений. Блог активно покрывает C++ и C#: публикуются статьи по анализу, поиску багов, особенностям работы компиляторов и практике.

📌 Оставляю ссылочку: pvs-studio.ru

➡️ C# Ready | #сайт

Читать полностью…

C# Ready | Unity

На Stepik добавили курс «Linux с нуля»

Этот курс закрывает всю обязательную Linux-базу для работы в IT. Подойдёт для:

- разработчиков
- девопсов и админов
- специалистов по данным и ML
- специалистов поддержки и сопровождения
- тестировщиков и безопасников


Внутри 20+ модулей: от установки Linux и работы с файлами до сетей, прав, дисков, процессов, автоматизации на Bash и многого другого. Всё сразу закрепляется на практике (200+ заданий с автопроверкой)

Материал подаётся понятным языком, шаг за шагом, на реальных примерах и с наглядными схемами

После прохождения вы получите сертификат, который можно добавить в резюме.

В ближайшие 48ч курс доступен со скидкой 30% по промокоду «READY30»: открыть курс на Stepik

Читать полностью…

C# Ready | Unity

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));


Смысл простой, а кода слишком много: служебные вызовы мешают увидеть, какие элементы в итоге получаются.

В C# 12 появились collection expressions — можно “собрать” коллекцию прямо по месту:
int[] baseIds = [1, 2, 3];

int[] result = [..baseIds, 10, 20];
Console.WriteLine(string.Join(", ", result));


Здесь ..baseIds означает “вставь все элементы baseIds на это место”.

🔥 В итоге коллекции читаются как данные, а не как набор операций по сборке.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

👍 OverAPI — огромная база шпаргалок для программистов!

Здесь можно быстро найти краткие справочники по синтаксису, командам и ключевым возможностям разных языков, чтобы не тратить время на долгий поиск документации. На сайте есть подробные шпаргалки по C++ и C#: быстрые справочники по синтаксису, контейнерам, алгоритмам STL, .NET и другим вещам, которые постоянно используются в разработке.

📌 Оставляю ссылочку: overapi.com

➡️ C# Ready | #сайт

Читать полностью…

C# Ready | Unity

Требуются парни и девушки в возрасте 19–40 лет, желающие работать в сфере IT.

Опыт в программировании не нужен.

Завтра запускаем бесплатный онлайн-интенсив по Frontend-разработке, где будем показывать, как разрабатывать сайты и веб-приложения используя ИИ.

За 7 дней обучения без опыта ты:

1. Сделаешь реальный сайт сервиса доставки с нуля;
2. Добавишь JavaScript-логику, расчёты и трекинг;
3. Подключишь карты и маршрут доставки через API;
4. Превратишь сайт в Angular-приложение;
5. Подключишь backend и выложишь проект в продакшен;
6. Научишься использовать ChatGPT и Giga во Frontend-разработке;
7. Узнаешь 9 способов найти первый заказ на фрилансе даже без опыта.

А главное, ты увидишь, что разрабатывать сайты и приложения не так сложно, как кажется. И поймёшь, как тебе развиваться в этой профессии, чтобы уже через пару месяцев зарабатывать от 1000$ на вёрстке сайтов.

👉 Проскочить на интенсив бесплатно

🔥 С 2019 стабильно помогаем с обучением, практикой, зарабатывать на фрилансе и проходить собеседования.

Читать полностью…

C# Ready | Unity

Почему 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"; // ошибка


Такой подход особенно полезен для DTO, response-моделей, конфигураций и любых объектов, которые после создания не должны меняться.

🔥 init — простой способ защитить состояние объекта и уменьшить риск случайных изменений.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

📂 Напоминалка для работы с OOP Design Patterns!

Например, Factory помогает делегировать создание объектов, а Observer — удобно реализовать систему подписок и событий.

На картинке — 9 самых нужных паттернов, которые часто встречаются в реальных проектах и архитектуре.

Сохрани, чтобы не потерять!

➡️ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

☕️ Нашёл годную статью — экспресс-введение в Avalonia UI, создание кроссплатформенного калькулятора на ․NET.

В этой статье:

• Базовая подготовка: dotnet new + VS Code, установка шаблонов Avalonia
• Разметка интерфейса на Grid и биндинги MVVM через ReactiveUI
• Стилизация: от локальных сеттеров до готовой Material-темы

🟡 Рекомендую прочитать на Habr!


➡️ C# Ready | #статья

Читать полностью…

C# Ready | Unity

❤️ Booldev — годная шпаргалка по C# и .NET!

Здесь собраны основные конструкции языка и типовые задачи, с которыми сталкиваются разработчики. Материал ориентирован на практику, показаны частые проблемы и подходы к их решению, что делает его удобным как быстрый справочник.

📌 Оставляю ссылочку: bool.dev

➡️ C# Ready | #сайт

Читать полностью…

C# Ready | Unity

🐱 Project-Based Learning — обучение через проекты!

Этот репозиторий собирает лучшие гайды, где вместо теории — реальные проекты, которые можно реализовать с нуля. Внутри есть десятки идей. В разделах по C++ и C# можно найти идеи разного уровня: работа с файлами, сетевое взаимодействие, графика, многопоточность и др. задачи.

Оставляю ссылочку: GitHub 📱


➡ C# Ready | #репозиторий

Читать полностью…

C# Ready | Unity

📂 Напоминалка по иерархии памяти и работе storage!

Например, регистры — это самый быстрый уровень памяти внутри CPU, кэш (L1/L2/L3) снижает latency за счёт локальности данных, RAM хранит рабочее состояние приложений, а SSD/HDD используются для персистентного хранения с существенно более высоким временем доступа.

На картинке — базовая иерархия памяти, взаимодействие CPU — cache — RAM — disk, а также упрощённая модель работы HDD и архитектура SSD.

Сохрани, чтобы не потерять!

➡ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

Регулярные выражения — полезная вещь, которую часто используют разработчики. Но за удобством скрываются риски.

Разберем их на вебинаре «Подводные камни регулярных выражений: катастрофический возврат, ReDoS-атаки и выявление уязвимостей». C# разработчик PVS-Studio Георгий Тормозов расскажет, как обычные регулярные выражения могут привести к уязвимостям, замедлить работу приложения и даже открыть путь для ReDoS-атак. Эксперт объяснит, почему это происходит и как это влияет на безопасность.

А девелопер-адвокат Глеб Асламов познакомит с инструментом, который помогает находить потенциально опасные регулярные выражения еще на этапе разработки. Спикер расскажет, как работает инструмент, чем он может быть полезен программистам и специалистам по безопасности.

🗓 Когда: 30 апреля в 16:00

Регистрируйтесь на вебинар по ссылке.

Подписывайтесь на PVS-Studio, чтобы всегда оставаться в курсе последних новостей
📱Telegram
📱
MAX

Читать полностью…

C# Ready | Unity

Обрабатываем пары значений с 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",
_ => "Другая точка"
};


🔥 Выражение стало компактнее, логика читается лучше, а добавление новых комбинаций — проще.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

👩‍💻 Познакомимся с методами Encoding — инструментом для конвертации строк в байты и обратно!

Они позволяют точно контролировать размер данных, корректно работать с различными кодировками и обеспечивать потоковую обработку текста без потери информации.

➡️ C# Ready | #шпора

Читать полностью…

C# Ready | Unity

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, коду или любому другому ключу

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

👩‍💻 string vs StringBuilder без лишней магии!

В этой шпаргалке — наглядно и по делу: когда обычная строка подходит идеально, а когда она начинает незаметно создавать кучу лишних объектов и тормозить код.

➡️ C# Ready | #шпора

Читать полностью…

C# Ready | Unity

🐱 Отличная статья — про то, как перейти на Minimal API в ASP․NET Core без лишней боли!

В этой статье:

• Разберёшься, чем Minimal API отличается от привычных контроллеров и где он действительно удобнее;
• Поймёшь, какие плюсы даёт такой подход в реальном проекте, а где могут всплыть ограничения;
• Посмотришь на практические нюансы миграции и поймёшь, стоит ли переходить на него в своём коде.

🔊 Продолжай читать на Habr!


➡️ C# Ready | #статья

Читать полностью…

C# Ready | Unity

Как меняется роль разработчика в 2026 году?

24 марта Mindbox проведет дебаты: эксперты по AI из SberDevices и Itsy обсудят, куда движутся технологии с AI и ответят на вопросы зрителей.

Зачем приходить
— узнать про подходы к AI с двух сторон: бизнес и разработка;

— спросить о том, что волнует, и обсудить все в чате дебатов;

— забрать идеи, которые работают у других, и поделиться своим опытом.

Подключайся и готовь вопросы!

Канал Сергея Маркова
Канал Никиты Архипова

📅 24 марта
⏰ 19:00–20:30 мск
📍 Онлайн, бесплатно

👉 Зарегистрироваться

Реклама ООО "Майндбокс". ИНН: 7713688880

Читать полностью…

C# Ready | Unity

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));


Смысл простой, а кода слишком много: служебные вызовы мешают увидеть, какие элементы в итоге получаются.

В C# 12 появились collection expressions — можно “собрать” коллекцию прямо по месту:
int[] baseIds = [1, 2, 3];

int[] result = [..baseIds, 10, 20];
Console.WriteLine(string.Join(", ", result));


Здесь ..baseIds означает “вставь все элементы baseIds на это место”.

🔥 В итоге коллекции читаются как данные, а не как набор операций по сборке.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

💡 Uizard — нейросеть для быстрого создания интерфейсов!

Это AI-инструмент для прототипирования UI/UX. Достаточно описать идею сайта или приложения, и нейросеть автоматически создаст структуру интерфейса. Также можно загрузить набросок или скриншот — AI преобразует его в редактируемый макет. Подходит для быстрого создания прототипов и лендингов без длительной работы в дизайнерских редакторах.

📌 Оставляю ссылочку: uizard.io

➡️ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

❤️ Нашёл годную статью — создание Telegram-бота с пошаговой настройкой и практическими примерами!

В этой статье:

• Регистрация бота через BotFather и получение токена
• Настройка клиента, запуск получения обновлений и обработка сообщений
• Обработка различных типов Update — сообщения, кнопки, опросы и другое

🟡 Рекомендую прочитать на Habr!


➡️ C# Ready | #статья

Читать полностью…
Subscribe to a channel