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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish

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

Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 21 865 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 6 209-o'rinni va Rossiya mintaqasida 30 824-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 21 865 obunachiga ega bo‘ldi.

11 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -95 ga, so‘nggi 24 soatda esa -6 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 12.48% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 7.13% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 2 729 marta ko‘riladi; birinchi sutkada odatda 1 560 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 9 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent .net, шарписта, навигация, await, string kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

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

Yuqori yangilanish chastotasi (oxirgi ma’lumot 12 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

21 865
Obunachilar
-624 soatlar
-237 kunlar
-9530 kunlar
Postlar arxiv
Не пропусти МТС True Tech Champ — масштабный фестиваль 21 ноября для тех, кто живет технологиями 🔥 Тебя ждут: ▫️ Захватывающая сюжетная линия. Тебя ждет уникальная кибервселенная с возможностью влиять на ход происходящего. ▫️ Конференция с международными спикерами. Эксперты расскажут о трендах в ИИ и инновациях в индустрии. ▫️ ИТ-качалка. Наращивай экспертизу на воркшопах. ▫️ Шоу-финал ИТ-чемпионата. Более 250 талантов со всей России сразятся в лайв-кодинге и программировании роботов на скоростное прохождение лабиринтов со спецэффектами. Выбирай и болей за фаворитов. ▫️ Айтивности. Тебя ждут бои роботов, кодерские челленджи, пайка плат и не только. Заработай True Coins и обменяй их на стильный мерч. ▫️ HR-Hub. Команда МТС расскажет о возможностях для развития в компании и поможет перезагрузить карьерный трек. ▫️ Афтепати со звездными хэдлайнерами. Зажги под популярные хиты. Когда: 21 ноября, МТС Live Холл в Москве и онлайн. Регистрируйся на сайте. Участие бесплатно, количество мест ограничено.

C#-навигация прямо в браузере? Да, теперь и такое есть! 👀 Для тех, кто работает с C#, приятные новости от SourceCraft. Платф
C#-навигация прямо в браузере? Да, теперь и такое есть! 👀 Для тех, кто работает с C#, приятные новости от SourceCraft. Платформа добавила умную навигацию, которая понимает связи между функциями и позволяет переходить по объявлениям прямо в веб-интерфейсе — как в вашей любимой IDE. 🔥 А ИИ-ассистент теперь дописывает методы на C# не изолированно, а в контексте всего проекта. Для команд с разнесёнными код-ревью или для быстрого онбординга новичков — просто находка. Можно даже коммитить правки из браузера, не теряя типизацию.

👨‍💻 6 дней работы Внимание! Вы проживаете аномальную неделю прямо сейчас. Вся неделя сдвинулась на один день и мы снова про
👨‍💻 6 дней работы Внимание! Вы проживаете аномальную неделю прямо сейчас. Вся неделя сдвинулась на один день и мы снова проживаем понедельник. Или у нас будет две пятницы. Учёные ещё не определились. 💬 Как вы? Уже устали или ещё полны энергии? 🐸 Библиотека шарписта #entry_point

💾 Всем фичам фича Вышло октябрьское обновление 86Box — эмулятора ПК IBM PC. Главное новшество — звуки флоппи-дисководов, зап
💾 Всем фичам фича Вышло октябрьское обновление 86Box — эмулятора ПК IBM PC. Главное новшество — звуки флоппи-дисководов, записанные с реальных устройств. Разработчик записал звуки с настоящих 3.5" и 5.25" дисководов. Эмулятор отслеживает активность мотора и головки дисковода в реальном времени и проигрывает соответствующие звуки. Получается достоверная звуковая картина — как будто перед вами настоящее железо из 90-х. ➡️ Полный список изменений 🐸 Библиотека шарписта #async_news

👨‍💻 Три структуры данных, которые игнорируются зря List — это универсальный солдат C#. Но универсальный не значит оптимальн
👨‍💻 Три структуры данных, которые игнорируются зря List<T> — это универсальный солдат C#. Но универсальный не значит оптимальный. Пока вы перебираете 10 000 элементов через .FirstOrDefault(), Dictionary находит нужное за одно обращение. И это только начало. Queue — когда порядок имеет значение Обрабатываете задачи по очереди? Вот вам готовое решение:
var tasks = new Queue<UserRequest>();

tasks.Enqueue(new UserRequest { Id = 1, Name = "Alice" });
tasks.Enqueue(new UserRequest { Id = 2, Name = "Bob" });

// Безопасное извлечение (с .NET 6+)
while (tasks.TryDequeue(out var request))
{
    await ProcessAsync(request);
}
Первым пришел — первым обработался. Никаких индексов, никаких сортировок. Stack — для истории действий Делаете undo/redo или навигацию? Стек решает это из коробки:
var history = new Stack<string>();

history.Push("/home");
history.Push("/products");
history.Push("/cart");

// Вернуться назад
if (history.TryPop(out var lastPage))
{
    Console.WriteLine($"Back to: {lastPage}"); // /cart
}
Последнее действие всегда доступно первым. Логика браузерной кнопки «Hазад» готова. Dictionary — когда нужна скорость Поиск по ключу за O(1) вместо перебора всего списка:
var users = new Dictionary<int, User>();

users.Add(1, new User { Name = "Alice" });
users.Add(2, new User { Name = "Bob" });

// Безопасная проверка
if (users.TryGetValue(2, out var user))
{
    Console.WriteLine(user.Name); // Bob
}
Никаких .FirstOrDefault(x => x.Id == 2) с перебором тысяч записей. List отлично работает, когда вам нужен доступ по индексу и порядок элементов. Но если задача укладывается в одну из этих трёх структур — используйте их. 🐸 Библиотека шарписта #il_люминатор

🧠 Готовишься к собесам, а ноутбук еле тянет 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