ru
Feedback
Библиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

Открыть в Telegram

Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Больше

📈 Аналитический обзор Telegram-канала Библиотека шарписта | C#, F#, .NET, ASP.NET

Канал Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 21 701 подписчиков, занимая 5 943 место в категории Технологии и приложения и 30 267 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 21 701 подписчиков.

Согласно последним данным от 29 августа, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -48, а за последние 24 часа — -6, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 16.72%. В первые 24 часа после публикации контент обычно набирает 7.84% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 3 628 просмотров. В течение первых суток публикация набирает 1 702 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 23.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как .net, шарписта, навигация, await, string.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Благодаря высокой частоте обновлений (последние данные получены 30 августа, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

21 701
Подписчики
-624 часа
-57 дней
-4830 день
Архив постов
🧠 Готовишься к собесам, а ноутбук еле тянет IDE? Самое время прокачать скиллы и апгрейднуть железо! Proglib Academy разыгрыв
🧠 Готовишься к собесам, а ноутбук еле тянет IDE? Самое время прокачать скиллы и апгрейднуть железо! Proglib Academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻 Купи любой наш курс до 15 ноября → пройди 2 недели обучения → напиши куратору #розыгрыш. Всё, ты в игре! 📚 Среди курсов: ▫️ Алгоритмы и структуры данных — топ для подготовки к собесам в Яндекс и FAANG. ▫️ Архитектуры и шаблоны проектирования — чтобы думать как senior. ▫️ Python, математика для DS, основы IT и другие направления. 👉 Принять участие

Опишите разницу между оператором равенства (==) и методом Equals() в C#? Оператор == и метод Equals() сравнивают два элемента данных типа значения или элемента данных ссылочного типа. Оператор равенства (==) является оператором сравнения, а метод Equals() сравнивает содержимое строки. Оператор == сравнивает ссылочную идентичность, тогда как метод Equals() сравнивает только содержимое. Библиотека собеса по С#

📰 Новости недели Вспоминаем что произошло в мире за последнее время. — ChatGPT продолжает неудачный додеп 6 ведущих AI-модел
📰 Новости недели Вспоминаем что произошло в мире за последнее время. — ChatGPT продолжает неудачный додеп 6 ведущих AI-моделей автономно торгуют реальным капиталом на криптовалютных рынках. — Microsoft Agent Framework в вашем .NET AI-чат приложении Пошаговое руководство по трансформации простого чат-бота в интеллектуального AI-агента с поддержкой инструментов, многошаговых рассуждений и оркестрации — используя знакомые .NET паттерны — На одну вакансию теперь 2383 отклика Microsoft запустили спонсорство для Nuget разрабовПодборка курсов для повышения скиллов 🐸 Библиотека шарписта #async_news

📁 Создаём директории правильно Частая задача: нужно убедиться, что папка существует перед сохранением файла. Многие пишут пр
📁 Создаём директории правильно Частая задача: нужно убедиться, что папка существует перед сохранением файла. Многие пишут проверку через Directory.Exists, но есть проще. Идиоматичный способ:
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
Directory.CreateDirectory идемпотентна — не бросает исключение, если директория уже есть. Метод просто ничего не делает и возвращает DirectoryInfo. Поэтому проверка через Exists избыточна и добавляет лишний вызов файловой системы. Path.GetDirectoryName может вернуть null для корневых путей или некорректных строк. Поэтому null-forgiving оператор ! используется, когда вы точно знаете, что путь валидный. 🐸 Библиотека шарписта #sharp_view

✏️ Задача с собеса: кинотеатр и лучшие места В кинотеатр пришли люди, и часть мест уже занята. Места описаны массивом из нулей и единиц: 1 — место занято 0 — место свободно Нужно найти такое место, чтобы сидящий оказался как можно дальше от ближайшего соседа. Разбор решения Нужно рассмотреть три типа промежутков свободных мест: • Начало ряда — расстояние до ближайшего соседа = количество нулей • Конец ряда — расстояние = количество нулей • Середина — расстояние = количество нулей / 2. Целочисленное деление. Алгоритм 1. Проходим по массиву один раз 2. Отслеживаем индекс последнего встреченного человека 3. При встрече человека вычисляем расстояние: • Если это первый человек → берём его индекс (левый край) • Если не первый → вычисляем (текущий_индекс - прошлый_индекс) / 2 3. После цикла проверяем правый край: n - 1 - последний_индекс 4. Возвращаем максимум из всех расстояний. Код:
public class Solution {
    public int MaxDistToClosest(int[] seats) {
        int n = seats.Length;
        int maxDist = 0;
        int lastPerson = -1;
        
        for (int i = 0; i < n; i++) {
            if (seats[i] == 1) {
                if (lastPerson == -1) {
                    // Левый край
                    maxDist = i;
                } else {
                    // Середина
                    maxDist = Math.Max(maxDist, (i - lastPerson) / 2);
                }
                lastPerson = i;
            }
        }
        
        // Правый край
        maxDist = Math.Max(maxDist, n - 1 - lastPerson);
        
        return maxDist;
    }
}
Задача решается одним проходом за линейное время. Главное — правильно обработать три случая: левый край, середину и правый край. ➡️ Попробовать решить Чтобы щёлкать такие задачи нужно знать алгоритмы. Подтянуть такую базу поможет наш курс по алгоритмам. До конца октября скидка 40% 🐸 Библиотека шарписта #dotnet_challenge

🍩 Донат разработчикам Microsoft запустили функцию спонсорства на NuGet.org для финансовой поддержки мейнтейнеров пакетов. Вл
🍩 Донат разработчикам Microsoft запустили функцию спонсорства на NuGet.org для финансовой поддержки мейнтейнеров пакетов. Владельцы пакетов добавляют ссылки через раздел "Manage Packages". Пользователи видят кнопку спонсорства и могут поддержать разработчиков напрямую. 🐸 Библиотека шарписта #async_news

⭐️ Подборка вакансий для шарпистов С# разработчик на гибрид в СПБ. Senior Backend Developer от 250 000 ₽. Web-разработчик на C# с удалёнкой. C# / .NET-разработчик на удалёнку. Бустер — Удалённо (в любом городе мира). ➡️ Еще больше топовых вакансий — в нашем канале C# Jobs 🐸 Библиотека шарписта

📎 Скрытая ловушка в енамках Метод Enum.TryParse кажется идеальным инструментом для безопасного парсинга строк в enum — он не
📎 Скрытая ловушка в енамках Метод Enum.TryParse кажется идеальным инструментом для безопасного парсинга строк в enum — он не бросает исключения и возвращает bool, сигнализируя об успехе или неудаче операции. Но у этого метода есть неочевидное поведение, которое может привести к багам. Представьте ситуацию: пользователь передаёт статус заказа через API, вы парсите его через TryParse, получаете true, уверенно обрабатываете заказ... и внезапно обнаруживаете в базе статус со значением 999, которого в вашем енаме вообще не существует. Enum.TryParse возвращает true даже для несуществующих значений enum:
public enum OrderType
{
    Cool = 0,
    NotCool = 1
}

// Парсим значение, которого НЕТ в enum
Enum.TryParse("999", out OrderType type);
// ✓ Вернёт TRUE
// ✓ day = (OrderType)999 
// ✗ Но 999 не определён в OrderType!

Console.WriteLine($"Результат: {type}"); // Вывод: 999
TryParse проверяет только возможность конвертации строки в числовой тип, а не валидность значения для конкретного enum. Решение Добавьте проверку через Enum.IsDefined:
if (Enum.TryParse("999", out OrderType type) && 
    Enum.IsDefined(typeof(OrderType), type))
{
    // Здесь значение гарантированно валидно
} else {
    // 999 будет правильно отклонено
}
Enum.IsDefined использует рефлексию и может быть медленным в hot path. Альтернативы:
// Для hot path: кешируем валидные значения
private static readonly HashSet<OrderType> ValidValues = 
    new(Enum.GetValues<OrderType>());

public static bool IsValid(OrderType value) => 
    ValidValues.Contains(value); // Быстрее IsDefined

// Для непрерывных enum: проверка диапазона
public static bool IsValid(OrderType value) => 
    (int)value >= 0 && (int)value <= 1; // Самый быстрый
Microsoft спроектировали это так намеренно, поскольку C# позволяет приводить любое число к типу енамки без ограничений. Это даёт гибкость, но требует от разработчика дополнительной бдительности. 🐸 Библиотека шарписта #sharp_view

💥 Октябрь — месяц апгрейда! До конца этого месяца действует скидка 40% на все курсы Proglib Academy (кроме AI-агентов, ML дл
💥 Октябрь — месяц апгрейда! До конца этого месяца действует скидка 40% на все курсы Proglib Academy (кроме AI-агентов, ML для старта и математики). Под акцию попал и наш хит — курс «Алгоритмы и структуры данных». 👨‍💻 Он подойдёт джунам, мидлам и всем, кто хочет писать код осознанно, а не наугад. 👨‍🏫 Преподаватели — инженеры из Яндекса и ВШЭ. 🎓 Сертификат по итогам обучения — в портфолио. ➖ 47 видеоуроков и 150 практических задач; ➖ поддержка преподавателей и чат; ➖ доступ к материалам на 12 месяцев. Полная программа курса тут 👈 👉 Остальные курсы

⚙️ Современные помощники для валидации параметров Помните те времена, когда каждый метод начинался с целой простыни проверок входных параметров? Копипаста if (string.IsNullOrEmpty(...)) была ежедневной рутиной:
public void ProcessUser(string name, string email, int age)
{
    if (string.IsNullOrEmpty(name))
        throw new ArgumentException("Value cannot be null or empty.", nameof(name));
    
    if (string.IsNullOrEmpty(email))
        throw new ArgumentException("Value cannot be null or empty.", nameof(email));
    
    if (age < 0)
        throw new ArgumentOutOfRangeException(nameof(age), "Value must be non-negative.");
    
    // Наконец-то бизнес-логика!
}
Код становился шумным, а реальная логика терялась в океане проверок. Каждый разработчик писал по-своему, сообщения об ошибках отличались, а про опечатки в nameof() вообще молчим. Теперь всё это превращается в лаконичные однострочники:
public void ProcessUser(string name, string email, int age)
{
    ArgumentException.ThrowIfNullOrEmpty(name);
    ArgumentException.ThrowIfNullOrEmpty(email);
    ArgumentOutOfRangeException.ThrowIfNegative(age);
}
Стандартная библиотека предлагает методы на все случаи жизни:
// Проверки на null
ArgumentNullException.ThrowIfNull(user);

// Числовые диапазоны
ArgumentOutOfRangeException.ThrowIfNegative(temperature);
ArgumentOutOfRangeException.ThrowIfZero(divisor);
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(count);

// Сравнения
ArgumentOutOfRangeException.ThrowIfGreaterThan(progress, 100);
ArgumentOutOfRangeException.ThrowIfLessThan(quantity, 1);
ArgumentOutOfRangeException.ThrowIfEqual(status, Status.Invalid);
ArgumentOutOfRangeException.ThrowIfNotEqual(version, expectedVersion);
Эти методы — не просто синтаксический сахар. Они воплощают принцип fail-fast: обнаруживай проблемы немедленно, не позволяй невалидным данным распространяться по системе. 🐸 Библиотека шарписта #sharp_view

💻 3 ядра 3 гига Каждому разрабу нужно только одно — рабочий компьютер. У каждого он свой. На винде, на линуксе или может даж
💻 3 ядра 3 гига Каждому разрабу нужно только одно — рабочий компьютер. У каждого он свой. На винде, на линуксе или может даже на макОси. 💬 Какой у вас сетап? Сколько ядер? Какая видеокарта? Хвастайтесь своими машинками в комментах 👇 🐸 Библиотека шарписта #entry_point

👀 Что такое Мультикаст-делегат Когда вы работаете с делегатами в C#, есть одна особенность, которая может превратить обычный
👀 Что такое Мультикаст-делегат Когда вы работаете с делегатами в C#, есть одна особенность, которая может превратить обычный делегат в мощный инструмент. Речь о multicasting — возможности связать с одним делегатом сразу несколько методов. Представьте, что у вас есть делегат. Обычно он указывает на один метод. Но в C# делегаты можно комбинировать:
public delegate void NotifyHandler(string message);

NotifyHandler handler = LogToConsole;
handler += SendEmail;
handler += SaveToDatabase;

handler("Пользователь авторизовался");
Когда вы вызовете handler, все три метода выполнятся последовательно. Именно эта возможность называется мультикаст. Основной сценарий — реализация паттерна Observer без лишних сложностей. Вы подписываете несколько обработчиков на одно событие, и все они получают уведомление. Важные детали • Методы вызываются в том порядке, в котором вы их добавили. Но полагаться на конкретный порядок — плохая практика. Ваши обработчики должны быть независимыми. • Если делегат возвращает значение, вы получите результат только от последнего метода в цепочке. • Если один из методов выбросит исключение, остальные не выполнятся. 🐸 Библиотека шарписта #sharp_view

🔥 Когда понимаешь SOLID — жизнь становится проще В октябре действует скидка 40% на все курсы от Proglib Academy, включая инт
🔥 Когда понимаешь SOLID — жизнь становится проще В октябре действует скидка 40% на все курсы от Proglib Academy, включая интенсив «Архитектуры и шаблоны проектирования» 📘 На интенсиве ты: — разберёшься, как проектировать приложения, которые не ломаются при каждом изменении; — освоишь SOLID-принципы, IoC, адаптеры и фабрики; — научишься строить масштабируемые архитектуры; — создашь собственную игру «Звёздные войны». 👨‍💻 Примеры кода на C#, Java, Python, PHP, C++ и JavaScript. Главное — понимать принципы, а не язык. Преподаватель — Евгений Тюменцев, директор компании HWdTech, разрабатывал многопоточные кроссплатформенные приложения для IBM Watson. 📆 Формат: онлайн, 1 месяц. 📚 9 лекций + 2 бонусных занятия + практика. Интенсив подойдёт джунам, которые хотят апнуться до мидла, и мидлам, мечтающим о роли архитектора. 👉 Переходи к курсам со скидкой 40%

🤨 На одну вакансию теперь 2383 отклика Вакансий для программистов стало на 17% меньше, резюме — на 25% больше. Рынок изменил
🤨 На одну вакансию теперь 2383 отклика Вакансий для программистов стало на 17% меньше, резюме — на 25% больше. Рынок изменился: теперь это не «рынок кандидата», а «рынок работодателя». В статье про то, что происходит с зарплатами, какие специалисты сейчас наиболее востребованы и почему одного знания языка уже недостаточно ➡️ Узнать как там рынок 🐸 Библиотека шарписта

⚡️ Динамическая сортировка в EF Core Представьте: у вас API со списком заказов. Клиент может сортировать по любому полю через
⚡️ Динамическая сортировка в EF Core Представьте: у вас API со списком заказов. Клиент может сортировать по любому полю через параметры запроса. Без динамики пришлось бы писать switch на все варианты:
IQueryable<Order> query = context.Orders;

query = sortBy switch
{
    "total_asc" => query.OrderBy(o => o.TotalAmount),
    "total_desc" => query.OrderByDescending(o => o.TotalAmount),
    "date_asc" => query.OrderBy(o => o.CreatedAt),
    "date_desc" => query.OrderByDescending(o => o.CreatedAt),
    // ещё 20 полей...
};
С динамической сортировкой код становится лаконичным:
var orders = context.Orders
    .Where(o => o.Status == OrderStatus.Completed)
    .OrderByDynamic("TotalAmount DESC")
    .ThenByDynamic("CreatedAt ASC");
Имя поля и направление сортировки передаются строкой. Всё остается IQueryable — запрос уходит в базу, а не выполняется в памяти. Можно комбинировать несколько уровней сортировки, передавая массив строк от клиента. Если строка сортировки приходит от пользователя, нужна валидация. Иначе можно получить exception на несуществующем поле или, хуже, уязвимость. 🐸 Библиотека шарписта #sharp_view

✏️ Как заработать на всех взлётах цены акций Дан массив цен акций по дням. Нужно найти максимальную прибыль, совершая любое количество сделок купли-продажи. Одновременно можно держать только одну акцию. Пример:
Цены: [7, 1, 5, 3, 6, 4] Ответ: 7
Покупаем за 1, продаём за 5 (прибыль 4). Покупаем за 3, продаём за 6 (прибыль 3). Итого — 7. Алгоритм Самый простой подход — жадный алгоритм. Если завтра цена выше, чем сегодня — покупаем сегодня и продаём завтра. Собираем прибыль с каждого роста цены. Представьте график цен: вам нужно получить прибыль со всех участков, где график идёт вверх. Неважно, сколько это будет сделок — каждый рост приносит деньги. Почему это работает Если цена растёт три дня подряд (например, 1 → 3 → 5), то неважно, продавать ли каждый день или держать до конца. Код:
public class Solution 
{
    public int MaxProfit(int[] prices) 
    {
        if (prices == null || prices.Length < 2)
            return 0;
        
        int totalProfit = 0;
        
        for (int i = 1; i < prices.Length; i++)
        {
            // Если цена выросла — берём эту прибыль
            if (prices[i] > prices[i - 1])
            {
                totalProfit += prices[i] - prices[i - 1];
            }
        }
        
        return totalProfit;
    }
}
Или ещё компактнее:
public class Solution 
{
    public int MaxProfit(int[] prices) 
    {
        int profit = 0;
        
        for (int i = 1; i < prices.Length; i++)
        {
            profit += Math.Max(0, prices[i] - prices[i - 1]);
        }
        
        return profit;
    }
}
Жадный подход здесь безупречен: захватываем каждый рост, игнорируем падения. Никаких сложных расчётов оптимальных точек — только простая логика и максимальная прибыль. ➡️ Попробовать решить Чтобы щёлкать такие задачи нужно знать алгоритмы. Подтянуть такую базу поможет наш курс по алгоритмам. До конца октября скидка 40% 🐸 Библиотека шарписта #dotnet_challenge