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

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

Ir al canal en Telegram

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

Mostrar más

📈 Análisis del canal de Telegram Библиотека шарписта | C#, F#, .NET, ASP.NET

El canal Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 21 865 suscriptores, ocupando la posición 6 209 en la categoría Tecnologías y Aplicaciones y el puesto 30 824 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 21 865 suscriptores.

Según los últimos datos del 11 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -95, y en las últimas 24 horas de -6, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 12.48%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.13% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 2 729 visualizaciones. En el primer día suele acumular 1 560 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 9.
  • Intereses temáticos: El contenido se centra en temas clave como .net, шарписта, навигация, await, string.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 12 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.

21 865
Suscriptores
-624 horas
-237 días
-9530 días
Archivo de publicaciones
👀 Что такое Мультикаст-делегат Когда вы работаете с делегатами в 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-образования В карточках разобрали, как университеты и онлайн-школы перестраивают программы под новую реальность, где разработчик становится дирижёром, а не исполнителем. ➡️ Узнать как ИИ меняет обучение 🐸 Библиотека шарписта