Почему IEnumerable лучше не перечислять несколько раз?
Это может быть LINQ-запрос, чтение из файла, генератор или результат из базы.
Например:
На первый взгляд код нормальный.
Но
А потом
Для маленького массива это не проблема.
Но для тяжёлого источника данных это может быть дорого или даже привести к разным результатам.
Если нужен повторный доступ, лучше явно сохранить данные:
А если нужен только проход — не делай лишнюю проверку перед
🔥 IEnumerable<T> — это не всегда коллекция в памяти. Иногда это инструкция, как получить данные.
➡️ C# Ready | #совет
IEnumerable<T> выглядит как обычная коллекция, но это может быть не список.Это может быть LINQ-запрос, чтение из файла, генератор или результат из базы.
Например:
if (orders.Count() > 0)
{
foreach (var order in orders)
Process(order);
}
На первый взгляд код нормальный.
Но
Count() может пройти всю последовательность.А потом
foreach пройдёт её ещё раз.Для маленького массива это не проблема.
Но для тяжёлого источника данных это может быть дорого или даже привести к разным результатам.
Если нужен повторный доступ, лучше явно сохранить данные:
var orderList = orders.ToList();
А если нужен только проход — не делай лишнюю проверку перед
foreach.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤3👍3
Например, Token Bucket отлично подходит для API с кратковременными burst-нагрузками, а Leaky Bucket помогает выравнивать поток запросов и защищать сервис от перегрузки.
На картинке — 5 популярных стратегий ограничения запросов, которые стоит знать каждому backend-разработчику.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤3🔥2👎1
Guard: создаём свои проверки аргументов
Иногда в метод приходит значение, которое обязательно должно быть заполнено: email, имя пользователя, путь к файлу или строка подключения.
Часто такие проверки пишут прямо внутри метода:
Такой код работает, но если подобных проверок становится много, они начинают повторяться по всему проекту.
В C# можно вынести такие проверки в небольшой helper и сделать код чище:
Теперь проверку можно использовать в любом месте:
Метод
Такой подход особенно удобен, когда в проекте много входных параметров, DTO, команд или сервисных методов. Вместо копирования одинаковых
Можно сделать вариант ещё удобнее — через extension method:
И тогда код становится короче:
Это не сложный паттерн и не отдельная библиотека, а маленький приём, который помогает убрать шум из методов и сделать проверки единообразными.
🔥 Guard — это способ не размазывать одинаковую валидацию по всему проекту.
➡️ C# Ready | #практика
Иногда в метод приходит значение, которое обязательно должно быть заполнено: email, имя пользователя, путь к файлу или строка подключения.
Часто такие проверки пишут прямо внутри метода:
void CreateUser(string email)
{
if (string.IsNullOrWhiteSpace(email))
throw new ArgumentException("Email is empty");
Console.WriteLine($"User created: {email}");
}
Такой код работает, но если подобных проверок становится много, они начинают повторяться по всему проекту.
В C# можно вынести такие проверки в небольшой helper и сделать код чище:
public static class Guard
{
public static string NotEmpty(string value, string name)
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentException($"{name} is empty");
return value;
}
}
Теперь проверку можно использовать в любом месте:
void CreateUser(string email)
{
email = Guard.NotEmpty(email, nameof(email));
Console.WriteLine($"User created: {email}");
}
Метод
NotEmpty сразу делает две вещи: проверяет значение и возвращает его обратно, если всё нормально.Такой подход особенно удобен, когда в проекте много входных параметров, DTO, команд или сервисных методов. Вместо копирования одинаковых
if ты собираешь проверки в одном месте.Можно сделать вариант ещё удобнее — через extension method:
public static class GuardExtensions
{
public static string NotEmpty(this string value, string name)
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentException($"{name} is empty");
return value;
}
}
И тогда код становится короче:
void CreateUser(string email)
{
email = email.NotEmpty(nameof(email));
Console.WriteLine($"User created: {email}");
}
Это не сложный паттерн и не отдельная библиотека, а маленький приём, который помогает убрать шум из методов и сделать проверки единообразными.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3👍2
С её помощью можно гарантировать уникальность объектов в приложениях и распределённых системах, создавать и восстанавливать идентификаторы из строкового вида, сравнивать и упорядочивать их, а также проверять на отсутствие значения.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🤝7❤2
Например,
Where() фильтрует коллекции, Select() преобразует данные, а GroupBy() помогает быстро группировать элементы по ключу.На картинке — основные LINQ-методы, разбитые по категориям: фильтрация, сортировка, агрегация, группировка, работа с последовательностями и другое.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥14👍4😁4
Взял заказ. Собрал бота. Агентство получило 15 000 рублей.
Пока ты ждёшь лучшую вакансию в своём городе — Владислав Пурвиньш закрывает заказы на чат-ботов силами учеников. (Заказов сейчас висит в поиске 10 786 запросов). Каждый получает от 15 000 рублей за заказ.
Которые даже не шарят в коде. Просто научились одному инструменту. И бизнесы платят им 200-250 000 рублей в месяц.
Схема простая: берёшь реальный заказ из базы → собираешь бота по шаблону → наставник проверяет → сдаёшь и забираешь деньги.
Старт 70-80 000 рублей. С опытом от 200 000 рублей в месяц.
Запусти бота, там пошаговый план как в 2026 году зарабатывать как нефтяник, только с ноута.
👉 @other_digital_bot
Обучение проходит официально — Владислав Пурвиньш имеет образовательную лицензию.
Пока ты ждёшь лучшую вакансию в своём городе — Владислав Пурвиньш закрывает заказы на чат-ботов силами учеников. (Заказов сейчас висит в поиске 10 786 запросов). Каждый получает от 15 000 рублей за заказ.
Которые даже не шарят в коде. Просто научились одному инструменту. И бизнесы платят им 200-250 000 рублей в месяц.
Схема простая: берёшь реальный заказ из базы → собираешь бота по шаблону → наставник проверяет → сдаёшь и забираешь деньги.
Старт 70-80 000 рублей. С опытом от 200 000 рублей в месяц.
Запусти бота, там пошаговый план как в 2026 году зарабатывать как нефтяник, только с ноута.
👉 @other_digital_bot
Обучение проходит официально — Владислав Пурвиньш имеет образовательную лицензию.
👎6
Локальная валидация и фильтрация в Minimal API с AddEndpointFilter!
В Minimal API удобно обрабатывать запросы в одной строчке. Но что, если нужно добавить проверку или логирование без лишней обвязки?
С .NET 8 можно использовать
Создаём минималку с фильтром на размер файла:
Теперь сам обработчик остаётся максимально чистым:
🔥 Гибкая локальная логика: логирование, авторизация, валидация — без middleware и лишнего кода!
➡️ C# Ready | #практика
В Minimal API удобно обрабатывать запросы в одной строчке. Но что, если нужно добавить проверку или логирование без лишней обвязки?
С .NET 8 можно использовать
AddEndpointFilter — он добавляет поведение *только* к нужному эндпоинту.Создаём минималку с фильтром на размер файла:
app.MapPost("/upload", UploadFile)
.AddEndpointFilter(async (context, next) =>
{
var file = context.GetArgument<IFormFile>(0);
if (file.Length > 5_000_000)
return Results.BadRequest("Файл слишком большой!");
return await next(context); // пропускаем дальше
});Теперь сам обработчик остаётся максимально чистым:
static IResult UploadFile(IFormFile file)
{
// сохраняем, обрабатываем и т.д.
return Results.Ok("Файл принят!");
}
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥3