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

👩‍💻 Сортируем LINQ без сюрпризов!

В этой шпаргалке — понятная разница между обычной и вторичной сортировкой, когда уместен Reverse(), и как задавать свой порядок сравнения без лишней путаницы.

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

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

C# Ready | Unity

☕️ CodeAbbey — тренажёр алгоритмического мышления!

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

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

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

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

C# Ready | Unity

Прогресс-бар в консоли для долгих операций — наглядный прогресс без UI!

Когда операция выполняется несколько секунд (или минут), пустая консоль выглядит как зависшая. Проще сразу показывать прогресс — например, в виде текстового прогресс-бара.

Нам хватит стандартных пространств имён:

using System;
using System.Threading;


Сделаем простой пример: у нас есть «долгая» операция из 100 шагов. В цикле будем имитировать работу через Thread.Sleep и обновлять строку прогресса:
int total = 100;

for (int i = 0; i <= total; i++)
{
DrawProgressBar(i, total);
Thread.Sleep(50); // имитация долгой работы
}

Console.WriteLine();
Console.WriteLine("Готово!");


Вся магия в методе DrawProgressBar: он считает процент, строит строку вида [#####-----] 50% и перерисовывает одну и ту же строку в консоли:
static void DrawProgressBar(int current, int total)
{
int width = 30; // ширина прогресс-бара в символах

double progress = (double)current / total;
int filled = (int)(progress * width);

string bar = new string('#', filled) + new string('-', width - filled);

Console.Write($"\r[{bar}] {progress:P0}");
}


Ключевой момент — \r в начале строки:
он возвращает курсор в начало текущей строки, поэтому новый вывод перезаписывает старую строку прогресса, а не переносит консоль вниз.

В итоге во время работы программы ты увидишь динамически меняющуюся строку:
[###############---------------] 50%


и по завершении — Готово!.

🔥 Главное — вынести отрисовку прогресса в отдельный метод и обновлять одну строку через \r, тогда консоль не превратится в простыню из сотен сообщений.

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

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

C# Ready | Unity

☕️ ByteHide Blog — C# Clean Code & Tips!

Блог про C# и .NET с упором на чистый и поддерживаемый код: практичные гайды, подборки сниппетов, разбор современных фич (C# 12, .NET 10, атрибуты, паттерны), плюс статьи для прокачки от уровня новичка до мидла.

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

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

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

C# Ready | Unity

👩‍💻 IEnumerable vs IQueryable без путаницы!

В этой шпаргалке разбираемся, чем отличается работа LINQ по уже загруженным коллекциям от “живых” запросов к базе: где на самом деле исполняется код, как влияет отложенное выполнение и материализация

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

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

C# Ready | Unity

Перестаём плодить new HttpClient() с IHttpClientFactory!

Частая ошибка: в каждом методе делать new HttpClient(). В итоге — утечки сокетов, странные таймауты и боль в проде. В .NET есть нормальный способ — IHttpClientFactory.

Сначала регистрируем фабрику и настраиваем клиент в DI:

using System;
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();

services.AddHttpClient("github", client =>
{
client.BaseAddress = new Uri("https://api.github.com/");
client.DefaultRequestHeaders.UserAgent.ParseAdd("CSharpReadySample");
});

var provider = services.BuildServiceProvider();


Достаём IHttpClientFactory и берём настроенный клиент по имени:
var factory = provider.GetRequiredService<IHttpClientFactory>();

using var client = factory.CreateClient("github");

var response = await client.GetAsync("repos/dotnet/runtime");
var content = await response.Content.ReadAsStringAsync();

Console.WriteLine(content[..200] + "...");


🔥 Главное — вместо десятков new HttpClient() используйте один IHttpClientFactory: настроили клиент в одном месте, берёте его из DI где нужно — без утечек и с предсказуемым поведением в проде.

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

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

C# Ready | Unity

📱 Корутины: сценарии времени без хаоса!

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

Коротко о корутинах:

• Помогают вынести ожидания и задержки из игрового цикла;

• Делают последовательные события читаемыми, как сценарий или раскадровка;

• Упрощают отладку странных зависаний, редких триггеров и переходов.


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

➡️ C# Ready | #unity

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

C# Ready | Unity

👩‍💻 Регулярки без магии и боли!

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

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

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

C# Ready | Unity

Удобный System.Text.Json в .NET 8 без Newtonsoft!

Во многих проектах до сих пор тянут Newtonsoft.Json только ради пары фич. В .NET 8 стандартный System.Text.Json уже закрывает большинство кейсов.

Сначала настраиваем опции сериализации и включаем snake_case:

using System;
using System.Text.Json;
using System.Text.Json.Serialization;

var options = new JsonSerializerOptions
{
// Имена свойств в JSON будут в snake_case
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
// Красивый формат для логов/отладки
WriteIndented = true
};


Описываем интерфейс и полиморфные реализации через атрибуты:
// Включаем полиморфную сериализацию по интерфейсу
[JsonPolymorphic(TypeDiscriminatorPropertyName = "$type")]
[JsonDerivedType(typeof(CreateUserCommand), typeDiscriminator: "create")]
[JsonDerivedType(typeof(DeleteUserCommand), typeDiscriminator: "delete")]
public interface ICommand { }

public record CreateUserCommand(string UserName) : ICommand;

public record DeleteUserCommand(Guid UserId) : ICommand;


Сериализуем команду в JSON и восстанавливаем обратно в интерфейс:
// Работаем через интерфейс — внутри может быть любая команда
ICommand cmd = new CreateUserCommand("test_user");

// Сериализация с нашими настройками
var json = JsonSerializer.Serialize(cmd, options);
Console.WriteLine(json);

// Десериализация обратно в ICommand
var restored = JsonSerializer.Deserialize<ICommand>(json, options);


🔥 Главное — в .NET 8 System.Text.Json уже умеет удобный snake_case и полиморфную сериализацию по интерфейсам, так что во многих сервисах можно спокойно обходиться без Newtonsoft.

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

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

C# Ready | Unity

Как создавать коллекции без десятка Add?

Во многих местах сначала создаём коллекцию, а потом построчно заполняем её — кода получается больше, чем самих данных:

var ids = new List<int>();
ids.Add(1);
ids.Add(2);
ids.Add(3);

var byId = new Dictionary<int, string>();
byId.Add(1, "Alice");
byId.Add(2, "Bob");


С инициализаторами коллекций данные видно сразу, без шума вокруг:
var ids = new List<int> { 1, 2, 3 };

var byId = new Dictionary<int, string>
{
[1] = "Alice",
[2] = "Bob"
};


🔥 Такой стиль хорошо заходит для константных списков, словарей настроек, маппингов enum → текст и тестовых данных — код читается как набор значений, а не как сценарий заполнения.

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

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

C# Ready | Unity

Как сократить цепочки if/else по статусам?

Во многих проектах бизнес-логика по статусам размазана по коду длинными цепочками if/else: для каждого нового состояния появляется ещё один блок, читать и поддерживать это всё становится всё сложнее

Классический вариант быстро разрастается:

string text;

if (status == OrderStatus.New)
text = "Новый заказ";
else if (status == OrderStatus.Paid)
text = "Заказ оплачен";
else
text = "Неизвестный статус";


switch-expression делает то же самое компактным выражением:
var text = status switch
{
OrderStatus.New => "Новый заказ",
OrderStatus.Paid => "Заказ оплачен",
_ => "Неизвестный статус"
};


Такой код легче читать глазами: видно все варианты сразу, проще добавить новый статус и сложнее забыть про default.

🔥 Хорошо заходит для маппинга enum → текст, выбора цвета, типа уведомления или уровня логирования.

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

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

C# Ready | Unity

📱 UI Events: гибкое управление интерфейсом!

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

В этом посте разбираем:

• События освобождают UI от лишних связей и настроек;

•
Логика реагирует гибко и не зависит от конкретных экранов;

•
Проект выдерживает изменения без поломок и переработок


Такой способ организации UI делает игру стабильнее, понятнее и легче расширяемой.

➡️ C# Ready | #unity

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

C# Ready | Unity

👩‍💻 Считаем повседневные расходы в консоли!

Берём несколько строк с тратами, превращаем их в структуру и заставляем программу показать, какая категория незаметно съедает большую часть бюджета.

В этой задаче:

• Соберёшь простой отчёт о тратах прямо в консоли;

• Увидишь, на какие категории уходит больше всего денег;

• Почувствуешь, как сухие числа превращаются в понятную картину дня.


С такого мини-инструмента легко начать путь к более честному и осознанному ежедневному личному бюджету.

➡️ C# Ready | #задача

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

C# Ready | Unity

📱 Секрет хронологии скриптов для стабильности!

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

В этом посте:

• Ранний запуск кода убирает неожиданные задержки во время старта;

• Чёткий порядок шагов помогает быстро ловить мелкие баги;

• Грамотная инициализация ускоряет запуск и упрощает будущие правки.


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

➡️ C# Ready | #unity

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

C# Ready | Unity

👩‍💻 Когда await спасает интерфейс от немого зависания?

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

В этом гайде:

• Помогаем коду “дышать” без остановки и ожидания

• Делаем действия пользователя мгновенно ощущаемыми и живыми

•
Учимся писать обработчики, которые не тормозят весь поток


Асинхронный код — это про комфорт: интерфейс работает, пока программа думает.

➡️ C# Ready | #гайд

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

C# Ready | Unity

Как убрать 10 одинаковых using в каждом файле?

В проектах быстро появляется “шапка”, которая копируется из файла в файл: System, Linq, коллекции, логирование, общие неймспейсы фреймворка. Полезного кода ещё нет, а сверху уже простыня.

using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
// + ещё 5–10 строк...


В C# 10 можно вынести общие using в один файл и сделать их глобальными — тогда они автоматически применяются ко всему проекту:
// GlobalUsings.cs
global using System;
global using System.Linq;


🔥 Итог: файлы становятся чище, меньше копипасты, меньше “шума” в каждом классе. Главное правило — выноси в global только то, что реально используется повсеместно (иначе можно получить лишние конфликты имён и путаницу).

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

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

C# Ready | Unity

👩‍💻 Сколько времени прошло на самом деле?

Переведём сухие числа разницы во времени в живые фразы, чтобы «через час» и «три дня назад» звучали естественно и не требовали пересчёта.

В этой задаче узнаешь:

• Как почувствовать разницу между датами, а не числами;

• Где естественно сказать «назад», а где «через»;

• Почему короткая фраза о времени понятнее таймера.


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

➡️ C# Ready | #задача

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

C# Ready | Unity

Как упростить работу с индексами и подстроками?

Классический подход — вечные Substring и ручные вычисления длины. В итоге получаем выражения, которые трудно читать и легко сломать:

var lastChar = input[input.Length - 1];
var withoutLast = input.Substring(0, input.Length - 1);


Чем больше таких мест, тем больше “магических чисел” и арифметики над Length, особенно при работе с расширениями файлов, префиксами и хвостами строк.

С индексами (^) и диапазонами (..) в C# можно писать это намного компактнее и ближе к тому, как мы думаем о строке:
var lastChar = input[^1];    // последний символ
var withoutLast = input[..^1]; // всё, кроме последнего


Здесь ^1 — “первый элемент с конца”, [..^1] — “с начала до элемента перед последним”. Для хвостов и расширений тоже получается читаемое правило: [^3..] — последние три символа, [..^4] — всё, кроме последних четырёх.

🔥 Итог: меньше Substring, меньше ручных Length - 1, код читается как работа с отрезками строки, а не как арифметика с индексами.

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

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

C# Ready | Unity

👍 Разбор C# async/await — понятное объяснение асинхронности без чёрной магии!

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

• Когда использовать асинхронность: IO-bound против CPU-bound операций
• Как async/await компилятором превращается в машину состояний
• Примеры Task, ValueTask, WhenAny и обработка исключений без магии

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


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

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

C# Ready | Unity

🧐 Напоминалка по netcat!

На картинке — компактная шпаргалка по nc: от сканирования портов до туннелей, чата и копирования дисков прямо из терминала.

Сохрани, чтобы под рукой был швейцарский нож сетевика!

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

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

C# Ready | Unity

⚡️ В сети начали массово сливать курсы и книги известных онлайн школ по айти

Вот отсортированная база с тонной материала (постепенно пополняется):

(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++/C#
(343 видео, 87 книги) — Java/QA
(176 видео, 32 книги) — Git/Linux
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP/1С
(227 видео, 83 книги) — SQL/БД
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go/Rust
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(136 видео, 33 книги) — PM/HR


Скачивать ничего не нужно — все выложили в Telegram

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

C# Ready | Unity

Программисты, это вам 👇

Держите 5 каналов, которые реально помогают изучать программирование и IT с полного нуля:

🖥 Easy Coder — все направления IT.

👩‍💻 Easy Python — всё о Python.

🌐 Easy WebDev — Frontend, Backend.

🔠 Easy InfoSec — ИБ, Хакинг.

🐱 Easy GitHub — лучшее с GitHub.

Тонны полезной инфы для любого уровня подготовки ✔️

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

C# Ready | Unity

👩‍💻 Асинхронность без лишних сложностей!

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

В этом гайде:

• Показываем, как ожидание не мешает выполнению программы;

• Объясняем, почему асинхронность делает интерфейс плавнее;

• Помогаем понять, где фоновые задачи действительно полезны.


Асинхронность — это способ делать больше без тормозов, сохраняя код простым и понятным.

➡️ C# Ready | #гайд

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

C# Ready | Unity

👩‍💻 Строим карту длины слов в тексте!

Мы превратим обычный ввод из консоли в небольшое исследование: возьмём текст, очистим его и соберём статистику по длинам слов, чтобы увидеть структуру фразы под новым углом.

В этой задаче:

• Превратим сырой набор строк в понятный материал для анализа;

• Увидим, как разные слова распределяются по длине и частоте;

• Сделаем простую таблицу, которая сразу показывает скрытые закономерности.


И в итоге получим маленький инструмент, который помогает внимательнее смотреть на любой текст.

➡️ C# Ready | #задача

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

C# Ready | Unity

👩‍💻 Файлы без страха и боли!

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

В этом гайде:

• Покажем, как аккуратно читать содержимое текстового файла;

• Разберём, как сохранять строки и дописывать новые;

• Поможем перестать бояться путей, ошибок и пустых файлов.


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

➡️ C# Ready | #гайд

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

C# Ready | Unity

Быстрые lookup-таблицы с FrozenDictionary в .NET 8!

Когда у тебя есть справочники «один раз создал — тысячу раз читаешь» (коды стран, статусы, типы операций), обычный Dictionary ок, но в .NET 8 можно выжать ещё больше скорости и меньше памяти.

Сначала собираем данные как обычно, затем «замораживаем» словарь:

using System.Collections.Frozen;

var countryCodes = new Dictionary<string, string>
{
["FI"] = "Finland",
["SE"] = "Sweden",
["NO"] = "Norway",
["DK"] = "Denmark",
};

// Один раз преобразуем в FrozenDictionary
var frozenCountryCodes = countryCodes.ToFrozenDictionary();

// Дальше работаем только с frozen-версией
if (frozenCountryCodes.TryGetValue("FI", out var name))
{
Console.WriteLine(name); // Finland
}


FrozenDictionary оптимизирован под частые чтения:
• строится один раз при старте,
• дальше не изменяется,
• lookup обычно быстрее, чем у обычного Dictionary,

Для наборов без значений — то же самое, но через FrozenSet:
using System.Collections.Frozen;

var euCountries = new[] { "FI", "SE", "NO", "DK" }.ToFrozenSet();

if (euCountries.Contains("FI"))
{
Console.WriteLine("EU country");
}


🔥 Главное — если коллекция инициализируется один раз и дальше только читается, переводи её в FrozenDictionary/FrozenSet.

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

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

C# Ready | Unity

👩‍💻 Безошибочная работа со словарями!

Овладей Dictionary — добавляй пары без неожиданностей, извлекай значения надёжно и убирай лишнее одним вызовом, сохраняя код чистым, понятным и отзывчивым.

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

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

C# Ready | Unity

Меньше бойлерплейта с primary constructors в C# 12!

Часто сервисы и модели обрастают полями DI и свойствами — код пухнет. В .NET 8 можно объявить всё прямо в заголовке класса.

Было ― вручную пишем конструктор и поля:

public class UserService
{
private readonly ILogger<UserService> _logger;
private readonly IUserRepo _repo;

public UserService(ILogger<UserService> logger, IUserRepo repo)
{
_logger = logger;
_repo = repo;
}

public Task<User?> GetAsync(Guid id) => _repo.FindAsync(id, _logger);
}


Стало ― primary constructor + автоматические свойства:
public class UserService(ILogger<UserService> Logger, IUserRepo Repo)
{
public Task<User?> GetAsync(Guid id) => Repo.FindAsync(id, Logger);
}


🔥 Главное — primary constructors вырезают шаблонный код: меньше строк, чище классы, быстрее читается ревью.

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

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

C# Ready | Unity

🖥 C# - обучение с помощью картинок и коротких видео, авторы объясняют сложные концепции и учат профессиональному подходу в работе на шарпе.

🔥C# задачи - разбираем ваш код и вопросы с собеседований на практике.

📔 C#/C++ lib - огромная библиотека книг.

🧠 Machine learning - показываем на примере как использовать AI, который может генерировать готовые базы данных, код, разбираем все что нужно знать в области ИИ.

🖥 SQLHUB – вся база по работе с SQL.

🖥 С++ Академия — самый крупный обучающий ресурс в Telegram, посвященный С++.

🔝 Здесь мы собрали самые полезные ресурсы для С#/.Net разработчиков.

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

C# Ready | Unity

⚡️⚡️⚡️ Мы собрали 7 самых сильных IT-каналов 2025 года.

Никакой воды — только боевой стек:


⌨️ Pro Python • IT – от скриптов до нейросетей

⚙ Pro DevOps | Linux – автоматизация, облака, администрирование

👣 Pro Go – высоконагруженные системы и микросервисы

🖥 Pro JavaScript & TypeScript – полный стек

⚙ Pro Backend – архитектура, базы данных, API

🖥 Pro Frontend – современные фреймворки и инструменты

⌨️ Pro Java – промышленная разработка и фреймворки

Подписывайся сейчас, смотреть будешь потом! 👍

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