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

Cотрудничество: @energy_c

РКН: https://clck.ru/3SBaT3
Download Telegram
Делаем мини-router команд на C#!

Нужно обработать набор текстовых команд без длинного switch? В этой задаче собираем простой router на Dictionary, который находит нужный обработчик и не зависит от регистра введённой команды.

В этой задаче:
• Храним команды в Dictionary;
• Ищем обработчик через TryGetValue;
• Запускаем нужное действие.


Такой подход удобен для CLI-утилит, ботов, админских команд и внутренних инструментов, где набор действий постепенно растёт.

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥114👍3
Почему LINQ-запрос может выполниться несколько раз?

LINQ часто выглядит как готовая коллекция:
var active = users.Where(u => u.IsActive);


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

Например:
var active = users.Where(u => {
Console.WriteLine(u.Name);
return u.IsActive;
});


Если пройтись по active два раза, фильтрация тоже выполнится два раза:
foreach (var user in active) { }

foreach (var user in active) { }


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

Когда результат нужен именно как снимок данных, лучше материализовать его явно:
var active = users
.Where(u => u.IsActive)
.ToList();


Теперь фильтрация выполнится один раз, а дальше код будет работать уже с готовым списком:
foreach (var user in active) { }
foreach (var user in active) { }


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

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍107🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
👍 TheAlgorithms C-Sharp — алгоритмы и структуры данных на C#!

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

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

➡️ C# Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
👍116🔥6
Полезная статья про создание Telegram-бота на C# с нуля!

В этой статье:
• Как зарегистрировать бота через BotFather и получить токен
• Как создать C#-проект и подключить Telegram.Bot
• Как принимать сообщения и постепенно собрать основу рабочего бота

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


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍5🔥3
Напоминалка по delegates, events и базовым конструкциям C#!

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

На картинке пример объявления delegate, регистрация методов, anonymous methods, события, популярные event handler-типы, а также рядом есть краткие блоки по классам, методам, struct, enum, свойствам и циклам.

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

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95🔥5
Делаем простой троттлинг действий в C#!

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

Для начала создадим время последнего запуска:
DateTimeOffset lastRun = DateTimeOffset.MinValue;


И зададим минимальный интервал:
TimeSpan interval = TimeSpan.FromSeconds(2);


Теперь проверим, можно ли выполнять действие:
bool CanRun()
{
return DateTimeOffset.UtcNow - lastRun >= interval;
}


Когда действие реально выполняется, обновляем lastRun:
if (CanRun())
{
lastRun = DateTimeOffset.UtcNow;
Console.WriteLine("search");
}


Но удобнее завернуть это в небольшой класс:
sealed class Throttler
{
private DateTimeOffset _lastRun = DateTimeOffset.MinValue;
private readonly TimeSpan _interval;

public Throttler(TimeSpan interval)
{
_interval = interval;
}

public bool TryRun(Action action)
{
var now = DateTimeOffset.UtcNow;

if (now - _lastRun < _interval)
{
return false;
}

_lastRun = now;
action();
return true;
}
}


Использование получается простым:
var throttler = new Throttler(TimeSpan.FromSeconds(2));

throttler.TryRun(() => Console.WriteLine("send request"));
throttler.TryRun(() => Console.WriteLine("send request"));


Первый вызов выполнится, а второй сразу после него будет пропущен.

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

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥75👍2
Собираем валидатор пароля на C#!

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

В этой задаче:
• Описываем правила как функции;
• Проверяем длину, цифры, регистр и спецсимволы;
• Собираем все ошибки в один список.


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

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍158🔥3
🔥95👍4
Полезная статья про Avalonia и реализацию MVVM на C# по шагам!

В этой статье:
• Что такое Avalonia и почему она интересна для кроссплатформенного desktop
• Как разделить интерфейс и бизнес-логику через MVVM
• Как постепенно собрать пример приложения с View, ViewModel, binding и данными

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


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥4👎1
Делаем простой rate limiter на C#!

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

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

• храним timestamps последних вызовов;
• удаляем старые события;
• проверяем лимит в скользящем окне;


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

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍6🔥4
8👍5🔥4
Разберём HttpClient: 7 возможностей для аккуратной работы с API!

HttpClient часто используют для интеграций, микросервисов и внешних HTTP-запросов. Чтобы код не превращался в ручную сборку строк, заголовков и JSON, стоит знать базовые возможности клиента.

В этой шпоре:
• базовый адрес через BaseAddress;
• общие заголовки;
• GET-запросы;


Эти вещи помогают писать API-клиенты короче, понятнее и устойчивее к зависаниям и ошибочным статусам.

➡️ C# Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥175👍4