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

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

Open in Telegram

Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Show more

📈 Analytical overview of Telegram channel Библиотека шарписта | C#, F#, .NET, ASP.NET

Channel Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) in the Russian language segment is an active participant. Currently, the community unites 21 865 subscribers, ranking 6 209 in the Technologies & Applications category and 30 824 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 21 865 subscribers.

According to the latest data from 11 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -95 over the last 30 days and by -6 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 12.48%. Within the first 24 hours after publication, content typically collects 7.13% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 2 729 views. Within the first day, a publication typically gains 1 560 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 9.
  • Thematic interests: Content is focused on key topics such as .net, шарписта, навигация, await, string.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Thanks to the high frequency of updates (latest data received on 12 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

21 865
Subscribers
-624 hours
-237 days
-9530 days
Posts Archive
👀 Что такое Мультикаст-делегат Когда вы работаете с делегатами в 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

⭐️ Безопасная очистка строки Чтобы не упасть на удалении пробелов по краям строки можно использовать ванлайнер:
var clean = input?.Trim() ?? string.Empty;
?. вызывает Trim() только если input не null, иначе возвращает null • ?? подставляет пустую строку, если результат null Итог: строка очищена от пробелов, либо получаем пустую строку — без риска. Откройте своим друзьям путь в айти с помощью нашего курса по основам IT для непрограммистов. До конца октября со скидкой! 🐸 Библиотека шарписта #sharp_view

⏰ Сегодня последний день! 🎁 Только при оплате до 19 октября — курс «Базовая математика» в подарок! Успей попасть на экспресс
⏰ Сегодня последний день! 🎁 Только при оплате до 19 октября — курс «Базовая математика» в подарок! Успей попасть на экспресс-курс «Математика для Data Science»10 живых вебинаров, практика на Python, поддержка менторов и преподаватели из ВШЭ, Яндекс Практикума и Wildberries. За 2 месяца разберёшься с тем, на чём держится Data Science:
• векторы, матрицы и регрессия; • градиенты, оптимизация, вероятности и статистика; • реальные задачи анализа данных;
🎓 Построишь математический фундамент и поймёшь, как работают алгоритмы ML под капотом. 👉 Записаться на курс Старт — 6 ноября, не упусти бонус!🎁

♾️ 17 формул, которые изменили мир Математика в действии — как уравнения, придуманные века назад, сегодня управляют интернето
♾️ 17 формул, которые изменили мир Математика в действии — как уравнения, придуманные века назад, сегодня управляют интернетом, медициной, космосом и вашими финансами. 📎 Читать статью А если после статьи захотите разобраться, как эта математика работает в Data Science — вот экспресс-курс, который всё расставит по полочкам: «Математика для Data Science»
— практика и живые уроки — разбор кода и проверка домашних — поддержка в Telegram-чате
🎓 За 2 месяца поймёте, как работают алгоритмы ML под капотом. 🗓️ Старт — 6 ноября 👉 Записаться на курс

🛠 Почему dynamic не заслуживает пожизненного бана Представьте: кто-то в команде написал код с dynamic, получил RuntimeBinder
🛠 Почему dynamic не заслуживает пожизненного бана Представьте: кто-то в команде написал код с dynamic, получил RuntimeBinderException в продакшене, и теперь это слово под запретом навсегда. Это самая ленивая политика в истории .NET. Вместо того чтобы разобраться с проблемой, команды просто заклеивают её скотчем из запретов. В чём подвох Когда вы запрещаете dynamic, разработчики не перестают решать те же задачи. Они просто переходят на рефлексию. И получается вот:
// Вместо одной строки
dynamic plugin = LoadPlugin("RenderEngine");
plugin.Render(data);

// Пишем вот это
var pluginType = plugin.GetType();
var method = pluginType.GetMethod("Render");
if (method == null) throw new InvalidOperationException("Method not found");
method.Invoke(plugin, new object[] { data });
800 строк рефлексии с silent nulls и магическими строками. Риски те же, код хуже, багов больше. Когда dynamic действительно нужен В 95% случаев dynamic — избыточен. Но есть сценарии, где он просто незаменим: • Плагин-системы Ваше приложение загружает расширения, которые вы не компилировали вместе с основным кодом. У вас нет доступа к типам на этапе компиляции. dynamic позволяет вызвать plugin.Calculate() без танцев с reflection. • Скриптинг Админы пишут небольшие скрипты для настройки логики — расчёт цен, трансформация данных. Вам не нужны 20 статических классов. Вам нужна гибкость с контролем. • Duck typing в тестах Когда вы тестируете поведение, а не типы. Не важно, какой это класс — важно, что он умеет делать GetPrice(). Не нужно создавать фейковые интерфейсы ради компилятора. Проблема не в dynamic. Проблема в бесконтрольном доступе. Если вы валидируете имена методов, ограничиваете доступ, логируете вызовы и ставите таймауты — вы в безопасности. Возможно, даже в большей, чем с тем лабиринтом из reflection, который живёт в половине вашего кода плагинов. 🐸 Библиотека шарписта #sharp_view

🔒 Октябрьские обновления безопасности Microsoft выпустила сервисные обновления для .NET 8.0 и .NET 9.0 с исправлениями уязви
🔒 Октябрьские обновления безопасности Microsoft выпустила сервисные обновления для .NET 8.0 и .NET 9.0 с исправлениями уязвимостей и багов. Исправили три уязвимости: CVE-2025-55315, CVE-2025-55247 и CVE-2025-21176. 🐸 Библиотека шарписта #async_news

Недавно мы анонсировали старт нового курса «Математика для Data Science». В ближайшие дни выйдет серия постов о том, что ждёт
Недавно мы анонсировали старт нового курса «Математика для Data Science». В ближайшие дни выйдет серия постов о том, что ждёт вас на курсе, а пока познакомим вас с его экспертами. Спикеры курса: 👤 Ксения Кондаурова Преподаватель и автор курсов для бакалавриата Центрального Университета (Т-Банк), спикер и методист для Edutoria (Сбербанк). Ксения расскажет, как линейная алгебра применяется для построения предсказательных моделей, и научит проверять гипотезы для бизнеса с помощью статистики. 👤 Диана Миронидис Преподаватель НИУ ВШЭ, автор и методист Яндекс Практикума. Самый экстравагантный преподаватель из всех, с кем вы учились, — убедитесь, что математика может быть нескучной. Диана погрузит в математический анализ, научит исследовать функции и находить параметры, при которых ошибка модели минимальна. 👤 Маргарита Бурова Академический руководитель образовательных программ по аналитике и анализу данных, Wildberries & Russ. Проведёт квиз с розыгрышем годовой подписки TG Premium. Маргарита — эксперт в дата-сайенс, ИИ и математических методах анализа данных, фанат развития ИТ-образования. Вместе с экспертами за 8 недель вы не просто получите знания, а познакомитесь с математикой заново. 🎁 Только при оплате до 19 октября курс «Базовая математика» в подарок! 👉 Записаться на курс

🔄 Как развернуть связный список Дан связный список, нужно развернуть его задом наперёд. Разберём как решить задачу элегантно. У вас есть цепочка узлов: 1 → 2 → 3 → 4 → 5. Каждый узел хранит значение и ссылку на следующий элемент. Задача — перевернуть все стрелки: 1 ← 2 ← 3 ← 4 ← 5. Главная сложность здесь не в алгоритме, а в работе с указателями. Стоит перезаписать ссылку неправильно — и вы теряете доступ к остальной части списка. Именно поэтому многие решения проваливаются на первой попытке. Итеративное решение: три указателя Самый надёжный подход — использовать три указателя, которые двигаются по списку синхронно. • prev отслеживает предыдущий узел • curr указывает на текущий обрабатываемый узел • next сохраняет следующий узел, чтобы не потерять его при развороте Код:
public ListNode ReverseList(ListNode head)
{
    ListNode prev = null;
    ListNode curr = head;
    
    while (curr != null)
    {
        ListNode next = curr.next;  // сохраняем следующий
        curr.next = prev;           // разворачиваем стрелку
        prev = curr;                // двигаем prev
        curr = next;                // двигаем curr
    }
    
    return prev;
}
Рекурсивное решение Если вам нравятся рекурсивные решения, есть и такой вариант:
public ListNode ReverseList(ListNode head)
{
    if (head == null || head.next == null)
        return head;
    
    ListNode newHead = ReverseList(head.next);
    head.next.next = head;
    head.next = null;
    
    return newHead;
}
Попробуйте решить задачу сами, прежде чем смотреть готовый код. Нарисуйте список на бумаге, отследите движение указателей вручную. Это единственный способ понять, что происходит. ➡️ Решить задачу 🐸 Библиотека шарписта #dotnet_challenge

🔄 Как развернуть связный список Дан связный список, нужно развернуть его задом наперёд. Разберём как решить задачу элегантно. У вас есть цепочка узлов: 1 → 2 → 3 → 4 → 5. Каждый узел хранит значение и ссылку на следующий элемент. Задача — перевернуть все стрелки: 1 ← 2 ← 3 ← 4 ← 5. Главная сложность здесь не в алгоритме, а в работе с указателями. Стоит перезаписать ссылку неправильно — и вы теряете доступ к остальной части списка. Именно поэтому многие решения проваливаются на первой попытке. Итеративное решение: три указателя 🐸 Библиотека шарписта #dotnet_challenge

📎 Порядок выполнения SQL-запросов Создали наглядную шпаргалку по работе с базами данных. Визуализировали последовательность
📎 Порядок выполнения SQL-запросов Создали наглядную шпаргалку по работе с базами данных. Визуализировали последовательность операций и их влияние на данные. #схема

⚡️ Microsoft выпустили .NET 10 rc2 Microsoft опубликовала второй и финальный релиз-кандидат .NET 10. Это значит, что платформ
⚡️ Microsoft выпустили .NET 10 rc2 Microsoft опубликовала второй и финальный релиз-кандидат .NET 10. Это значит, что платформа практически готова к официальному выходу, а вы уже сейчас можете протестить её. Что обновили — .NET MAUI: разрешения для микрофона, SafeAreaEdges, улучшенная генерация из XAML, Android API 36.1, биндинги Xcode 26. —Entity Framework Core: фиксы для JSON, миграции без единой транзакции, ExecutionStrategy для retry-логики, предупреждения анализатора при конкатенации строк в raw SQL. —Остальные компоненты получили только багфиксы. ➡️ Установить .NET rc2 #async_news

🎲 Мы не только учим, но и играем! На экспресс-курсе «Математика для Data Science» — викторина с призом TG-Premium 🎁 Проверь
🎲 Мы не только учим, но и играем! На экспресс-курсе «Математика для Data Science» — викторина с призом TG-Premium 🎁 Проверь знания, прокачай математику и забери приз. ‼️ Оплатишь до 19 октября — получишь базовый курс в подарок. 👉 Записаться на курс

🎓 Как вайб-кодинг меняет рынок IT-образования В карточках разобрали, как университеты и онлайн-школы перестраивают программы
+5
🎓 Как вайб-кодинг меняет рынок IT-образования В карточках разобрали, как университеты и онлайн-школы перестраивают программы под новую реальность, где разработчик становится дирижёром, а не исполнителем. ➡️ Узнать как ИИ меняет обучение 🐸 Библиотека шарписта