C# Ready | Unity
10.1K subscribers
1.2K photos
62 videos
553 links
Авторский канал по разработке на C# и Unity.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3SBaT3

Реклама на бирже: https://telega.in/c/csharp_ready
Download Telegram
👩‍💻 Рисуем дерево файлов и папок в консоли!

Берём путь к папке и превращаем его в наглядное дерево: с отступами, «ветками» и файлами внутри. Вывод мгновенно показывает структуру проекта или директории — без проводника и лишних кликов.

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

Рекурсивно обойдёшь подкаталоги и соберёшь структуру папок и файлов;

Научишься рисовать ветки ├──, └── и вертикальные линии;

Выведешь аккуратное дерево в консоль, получив свой мини-tree.


Такой вывод удобно использовать, чтобы быстро просматривать структуру репозитория, делиться скриншотами дерева и встраивать результат в свои CLI-инструменты или скрипты сборки.

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥128🤝5
Как не городить try/catch вокруг каждого вызова?

В бизнес-логике часто у каждой операции свой try/catch: обрабатываем заказ, отправляем письмо, пишем в лог — и везде одинаковый catch с логированием и сообщением пользователю:

try { ProcessOrder(orderId); }
catch (Exception ex) { Log(ex); ShowError("Что-то пошло не так"); }

try { SendEmail(orderId); }
catch (Exception ex) { Log(ex); ShowError("Что-то пошло не так"); }


С фильтрами в catch обработку ошибок можно вынести в одно место. В try остаётся чистый, линейный код, а любой выброшенный Exception попадает в один catch.

🔥 Условие when (LogError(ex)) сначала логирует ошибку, затем возвращает true, поэтому блок обработки выполнится только после успешного логирования.

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍169🔥6
👩‍💻 Коллекции без лишней магии!

В этой шпаргалке — быстрый обзор базовых коллекций .NET и правил их выбора: список, словари, множества, очередь и стек. Понимая их назначение, проще писать код, который и читабелен, и работает эффективно.

➡️ C# Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍1512🤝7😁1
This media is not supported in your browser
VIEW IN TELEGRAM
☕️ Catlike Coding — отличный сайт по графике и Unity!

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

Если интересен геймдев или хочешь лучше понимать, как работает графика в играх — сохраняй.

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

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍198🔥6
Мини-кеш в памяти через MemoryCache — меньше лишних запросов к БД!

Когда данные меняются редко, но читаются постоянно (настройки, справочники, профили), тянуть их каждый раз из БД или файла — расточительно. Проще один раз загрузить и держать в памяти пару минут, используя MemoryCache.

Сначала подключим нужные пространства имён и создадим кеш:
using System;
using Microsoft.Extensions.Caching.Memory;

var cache = new MemoryCache(new MemoryCacheOptions());


Теперь сделаем метод, который сначала пытается взять данные из кеша, а если их там нет — читает из «БД» и кладёт в кеш на 5 минут:
string GetUserName(int userId)
{
string cacheKey = $"user:{userId}";

if (!cache.TryGetValue(cacheKey, out string name))
{
Console.WriteLine("Читаем из БД...");
name = LoadUserNameFromDatabase(userId);

// кэшируем на 5 минут
cache.Set(cacheKey, name, TimeSpan.FromMinutes(5));
}

return name;
}


Для примера сделаем простую «заглушку» под запрос к БД:
string LoadUserNameFromDatabase(int userId)
{
// здесь могла бы быть реальная работа serId}";
}


Теперь посмотрим, как это работает при двух подряд вызовах с одним и тем же userId:
Console.WriteLine(GetUserName(42)); // первый вызов — попадём в "БД"
Console.WriteLine(GetUserName(42)); // второй вызов — уже из кеша


Возможный вывод в консоли:
Читаем из БД...
User #42
User #42


🔥 Обрати внимание: сообщение «Читаем из БД…» появилось только один раз — дальше значение берётся из памяти, пока не истечёт время жизни записи (в нашем примере 5 минут).

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1810🔥6
29😁15🔥10👎2
Как избавиться от конкатенации строк в логах?

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

_logger.LogWarning(
"User " + userId + " not found in " + source);


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

С интерполяцией и шаблонами сообщения становятся короче и понятнее:
_logger.LogWarning("User {UserId} not found in {Source}", userId, source);


Текст читается как обычное предложение, а значения подставляются отдельными аргументами. Логгер может сохранить их структурированно — по полям UserId, Source, что упрощает фильтрацию и поиск.

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

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍159🔥6
👩‍💻 Форматируем байты в понятные размеры!

Берём одно число в байтах и превращаем его в удобный формат: 1,15 ГБ, 756,4 МБ или 512 Б. Сразу видно, сколько это на самом деле — вместо того, чтобы считать нули глазами.

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

Определишь подходящую единицу измерения (Б, КБ, МБ, ГБ, ТБ) по величине числа;

Реализуешь функцию, которая делит размер на 1024 и аккуратно округляет результат до двух знаков после запятой;

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


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

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1610👍6🤝1
📂 Напоминалка по созданию грамотных RESTful API!

Например, корректное использование HTTP-методов и чёткая структура эндпоинтов делают API предсказуемым и удобным для интеграции.

На картинке — 8 ключевых принципов, которые стоит учитывать при проектировании API: от версионирования и семантических путей до batch-операций и продуманного query-языка.

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

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍97👎1🤝1
Цветной лог в консоли через Console.ForegroundColor — ошибки сразу в глаза!

Обычный консольный лог — это сплошная серая простыня текста. Гораздо приятнее, когда ошибки красные, предупреждения жёлтые, а успешные операции зелёные.

В .NET это делается в пару строк через Console.ForegroundColor.

Подключать ничего дополнительно не нужно, достаточно стандартного System:
using System;


Сделаем маленький «логгер» с тремя уровнями: Info, Warn и Error — каждый со своим цветом:
static class Logger
{
public static void Info(string message) =>
Write("INFO", message, ConsoleColor.Green);

public static void Warn(string message) =>
Write("WARN", message, ConsoleColor.Yellow);

public static void Error(string message) =>
Write("ERROR", message, ConsoleColor.Red);

private static void Write(string prefix, string message, ConsoleColor color)
{
var prev = Console.ForegroundColor;

Console.ForegroundColor = color;
Console.WriteLine($"{prefix}: {message}");
Console.ForegroundColor = prev; // возвращаем старый цвет
}
}


Теперь пользоваться таким логгером очень просто:

Logger.Info("Сервис успешно запущен");
Logger.Warn("Конфиг не найден, используем значения по умолчанию");
Logger.Error("Не удалось подключиться к базе данных");


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

🔥 Главное — всегда возвращать предыдущий цвет (prev), чтобы не поломать остальной вывод консоли.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍169🔥6
👩‍💻 Когда null перестаёт ломать программу?

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

В этом гайде:

Покажем, как аккуратно обращаться с возможными пустыми значениями;

Разберём приёмы, которые заменяют громоздкие проверки в коде;

Поможем сделать поведение программы стабильным даже при ошибках ввода.


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

➡️ C# Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥148🤝4