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

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

Открыть в Telegram

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

Больше

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

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

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

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

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

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

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

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

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

21 866
Подписчики
-624 часа
-237 дней
-9530 день
Архив постов
🤝 Перестаньте ждать, пока вас найдут Обычный сценарий поиска работы в ИТ до сих пор у многих сводится к загрузке резюме на н
🤝 Перестаньте ждать, пока вас найдут Обычный сценарий поиска работы в ИТ до сих пор у многих сводится к загрузке резюме на несколько площадок и ожиданию, пока система кого то заинтересует. При этом автоматические правила, внутренние фильтры и массовая обработка откликов оставляют кандидата без ответа. Альтернатива в том, чтобы не ограничиваться джоббордами и целенаправленно выходить на людей, которые управляют инженерными командами. Общение с CTO, тимлидами и фаундерами превращает поиск работы в прямой профессиональный разговор, а не попытку пройти через набор формальных стадий. ➡️ Действуйте, ищите, откликайтесь 🔸 Практический интенсив «Архитектуры и шаблоны проектирования» 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib 🐸 Библиотека шарписта

⭐️ Логирование исключений с помощью фильтров Фильтры исключений позволяют выполнить код при срабатывании catch, но при этом не перехватывать исключение. Пример:
try 
{
    await work();
}
catch (Exception ex) when (Log(ex))
{
    // этот блок не выполняется, так как Log возвращает false
}

static bool Log(Exception ex)
{
    // логируем исключение
    return false;
}
Метод Log вызывается один раз при исключении, логирует его и возвращает false, чтобы исключение продолжило всплывать дальше без перехвата. 🔹 Алгоритмы и структуры данных 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view

🛠 Структурные опциональные параметры в F# 10 В F# 10 появилась возможность использовать структурный тип ValueOption<'T> для опциональных параметров. Это позволяет избежать выделения памяти в куче. Теперь, применяя атрибут [<Struct>], можно указать компилятору использовать ValueOption<'T> — структуру, которая хранится на стеке и не требует дополнительных аллокаций. Раньше:
type X() =
    static member M(?x: string) =
        match x with
        | Some v -> printfn "Some %s" v
        | None -> printfn "None"
Теперь с F# 10:
type X() =
    static member M([<Struct>] ?x: string) =
        match x with
        | ValueSome v -> printfn "ValueSome %s" v
        | ValueNone -> printfn "ValueNone"
Такой код работает быстрее в случаях, когда параметр отсутствует, и уменьшает давление на сборщик. 🔹 Экспресс-курс «Математика для Data Science» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view

Не кодь — вайбкодь. Бесплатно 🚀 Сбер представил бесплатный агентный режим GigaCode — нового цифровой разработчика, который б
Не кодь — вайбкодь. Бесплатно 🚀 Сбер представил бесплатный агентный режим GigaCode — нового цифровой разработчика, который берет на себя рутину, чтобы вы могли сосредоточиться на крутых задачах! Что умеет GigaCode в агентном режиме? ⏩Сам находит и открывает нужные файлы ⏩Вносит изменения в код, запускает тесты, собирает проекты и оформляет коммиты в Git ⏩Работает в вашей любимой среде: JetBrains IDE, GigaIDE Desktop, а скоро еще и в VS Code Плюс, в GigaCode появилась новая модель автодополнения кода — GigaCode Inline 4.0. Она мгновенно предлагает нужные фрагменты кода для Python, Java, JavaScript и других языков. Подсказки стали еще точнее, а работа с контекстом — еще лучше. 🖱 Хотите ускорить разработку? Обновленный GigaCode уже доступен на GitVerse. Начать вайбкодить — по ссылке

🤨 Как искусственный интеллект помогает писать тесты Создание качественных модульных тестов — важный, но утомительный и затра
🤨 Как искусственный интеллект помогает писать тесты Создание качественных модульных тестов — важный, но утомительный и затратный процесс. GitHub Copilot Testing для .NET упрощает эту задачу, автоматически генерируя, собирая и выполняя тесты прямо в вашем рабочем процессе. Как начать использовать 1. Установите последнюю версию Visual Studio 2026 Insiders и получите лицензию GitHub Copilot 2. Включите функцию GitHub Copilot Testing через настройки (Tools > Options > GitHub > Copilot > Testing 3. Откройте проект или решение на C# и убедитесь, что оно успешно собирается 4. В чате Copilot напишите команду @Test #target, где #target — имя метода, класса, файла, проекта, решения или #changes для git diff 5. Copilot автоматически проанализирует код, создаст проект с тестами (если его нет), сгенерирует, соберёт и выполнит тесты. Результаты отображаются в Test Explorer и в окне чата, где вы увидите статистику по числу тестов, изменениям в покрытии кода и рекомендации по устранению «тестируемых» пробелов. 🔹 Специалист по ИИ 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека шарписта #sharp_view

✏️ Сокращаем код Collection expressions — удобный синтаксис для создания и инициализации коллекций и массивов с помощью квадратных скобок и элементов, разделённых запятыми. Можно использовать spread-элементы (..) для вставки содержимого других коллекций внутрь новой. Пример:
int[] odds = [1, 3, 5, 7];

string[] vowels = ["a", "e", "i", "o", "u"];
string[] consonants = ["b", "c", "d", "f"];
string[] alphabet = [..vowels, ..consonants, "y"];
С помощью выражений коллекций можно легко создавать массивы, списки, Span и другие коллекторные типы. Появились они в C# 12. 🔹 Экспресс-курс «Математика для Data Science» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view

🧑‍💻 Новые возможности модификаторов доступа на авто-свойствах в F# 10 До F# 10, чтобы создать свойство с публичным геттером и приватным сеттером, приходилось писать много кода с явным объявлением полей и методов. Теперь это стало проще — можно задавать разные уровни доступа прямо на авто-свойствах. Раньше подобное требовало большого количества шаблонного кода:
type Ledger() =
    [<DefaultValue>] val mutable private _Balance: decimal
    member this.Balance with public get() = this._Balance and private set v = this._Balance <- v
В F# 10 достаточно написать:
type Ledger() =
    member val Balance = 0m with public get, private set
Особенности • Модификатор доступа можно назначить либо на всё свойство, либо отдельно на геттер или сеттер. • В сигнатурах .fsi это пока не поддерживается, ограничения остаются Теперь можно писать меньше шаблонного кода, сохраняя чёткое разграничение прав собственности. 🔹 ML для старта в Data Science 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека шарписта #sharp_view

😊 Модернизация .NET приложений с GitHub Copilot Обновление устаревших .NET приложений часто превращается в мучительный проце
😊 Модернизация .NET приложений с GitHub Copilot Обновление устаревших .NET приложений часто превращается в мучительный процесс с долгими исправлениями и конфликтами зависимостей. С GitHub Copilot модернизация стала проще и быстрее — этот инструмент помогает автоматизировать всё главное, сокращая время работы с недель до нескольких часов. Как начать модернизацию 1. Откройте проект или решение в Visual 2. Запустите агент-сессию: через контекстное меню Modernize или в GitHub Copilot Chat используя команду @modernize 3. Выберите путь модернизации: обновление версии .NET, миграция в Azure или другие опции 4. Проведите оценку и спланируйте • Copilot анализирует код и зависимости • Задаёт вопросы для настройки плана под ваши цели • Генерирует Markdown-план модернизации для согласования и редактирования Как проходит обновление • После утверждения плана Copilot обновляет файлы, корректирует импорты и синтаксис автоматически • Циклично исправляет ошибки сборки и запускает тесты для обеспечения стабильности • Каждый крупный шаг фиксируется в Git с возможностью отката • В случае сложных проблем, Copilot останавливается и запрашивает ваш ввод ➡️ Источник 🔹 Специалист по ИИ 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека шарписта #sharp_view

📊 А правда, что математика в Data Science не нужна? Нет. Без неё вы не пройдёте собес и не поймёте, почему модель ведёт себя
📊 А правда, что математика в Data Science не нужна? Нет. Без неё вы не пройдёте собес и не поймёте, почему модель ведёт себя странно. Линал, матан и вероятности — это база, без которой работа в ML превращается в угадайку. 🔥 Эту базу можно собрать за 2 месяца на экспресс-курсе «Математика для Data Science». 👩‍🏫 Кто ведёт курс:Мария Тихонова PhD, руководитель исследовательского направления в SberAI, доцент ВШЭ. → Диана Миронидис Преподаватель ВШЭ, автор научпоп-материалов по математике для блога МТС. → Ксения Кондаурова Преподаватель преподаватель T-Банка, автор курсов ЦУ и Edutoria. → Маргарита Бурова Академический руководитель программ по аналитике и ML, Wildberries & Russ. 🎁 Что сейчас доступно: → бесплатный тест, чтобы узнать свой уровень математики; → скидка 40% до 30 ноября; → если оплатить до конца ноября, курс «Базовая математика» в подарок. 👉 Пишите менеджеру, если хотите попасть в поток

✏️ Null-условное присваивание В обыденной работе с объектами часто приходится проверять, не равен ли объект null, прежде чем присваивать значение его свойствам. Это приводит к громоздким конструкциям с множеством if. Теперь с null-условным присваиванием можно написать проще и понятнее. Операторы условного доступа ?. и ?[] теперь поддерживают использование слева от оператора присваивания. Раньше для безопасного присваивания требовалось писать так:
if (customer is not null)
{
    customer.Order = GetCurrentOrder();
}
С null-условным присваиванием можно упростить до одной строки:
customer?.Order = GetCurrentOrder();
Особенность в том, что правая часть вычисляется только если левая часть не равна null. Если customer равен null, метод GetCurrentOrder() вызван не будет. Это оптимизирует производительность и упрощает логику. Также это работает с составными операторами присваивания: +=, -=, *=, но не поддерживается для инкремента и декремента.
customer?.Total += 100;
// Но нельзя так:
// customer?.Total++;
🐸Библиотека шарписта #il_люминатор

👨‍💻 Какой канал ваш любимый Библиотека — не единственный канал по экосистеме C# (удивительно!). В комментариях можете подел
👨‍💻 Какой канал ваш любимый Библиотека — не единственный канал по экосистеме C# (удивительно!). В комментариях можете поделиться своими авторскими каналами или ресурсами и источниками, которыми вдохновляетесь при разработке. 🐸Библиотека шарписта #entry_point

🎆 Скоро Новый Год Если уже считаете дни до Нового Года «+» в чат, а пока вспомним прошедшую неделю. — Перестраиваем процесс
🎆 Скоро Новый Год Если уже считаете дни до Нового Года «+» в чат, а пока вспомним прошедшую неделю. — Перестраиваем процесс сборки и доставки .NET Проект Unified Build меняет подход к созданию и выпуску .NET, делая сборку быстрее, проще и более предсказуемой за счет объединения исходников и управления кодом в едином виртуальном репозитории. — Исходный код Zork I, II и III стал открытым Microsoft открыла исходники легендарных текстовых игр Zork. — В блокноте на Windows 11 появятся таблицыWindows Edge Light в PowerToysGit 2.52 🔸 Математика для Data Science 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib 🐸Библиотека шарписта #async_news

🛠 Как создать путь к временному файлу в C# В C# для работы с путями к файлам существует класс Path, который предлагает метод
🛠 Как создать путь к временному файлу в C# В C# для работы с путями к файлам существует класс Path, который предлагает методы для объединения частей путей и получения системных директорий. Один из таких методов — GetTempPath(). Он возвращает путь к папке, предназначенной для временных файлов на текущей системе. Другой полезный метод — Combine(). Он соединяет несколько частей пути, учитывая особенности слэшей в Windows, Linux и macOS. Вместо ручного склеивания строк и риска ошибок, Combine() гарантирует правильный формат. Пример:
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // Получаем путь к системной временной папке и добавляем имя файла
        var path = Path.Combine(Path.GetTempPath(), "report.csv");
        Console.WriteLine("Путь к временному файлу: " + path);

        // Здесь можно сохранить файл, открыть или выполнить другие операции
    }
}
Использование Path.GetTempPath() и Path.Combine() — простой способ получить корректный путь к временному файлу без ошибок и с учётом особенностей операционных систем. 🔸 Основы IT для непрограммистов 🔸 Получить консультацию менеджера 🔸 Сайт Академии 🔸 Сайт Proglib 🐸Библиотека шарписта #il_люминатор

⭐️ Пост-квантовая криптография в .NET 10 релизе .NET 10 Microsoft активно внедряет поддержку алгоритмов PQC, чтобы обеспечить
⭐️ Пост-квантовая криптография в .NET 10 релизе .NET 10 Microsoft активно внедряет поддержку алгоритмов PQC, чтобы обеспечить будущее безопасных приложений уже сегодня. Термин «пост» в PQC не означает, что квантовые компьютеры уже здесь. Это про алгоритмы, которые будут устойчивы к атакам со стороны мощных квантовых вычислительных систем, которые могут создать угрозу традиционным методам шифрования, таким как RSA и ECC. В .NET 10 представлены четыре ключевых алгоритма PQC с поддержкой стандартов NIST и IETF: • ML-KEM — алгоритм для захвата ключа, поддерживаемый NIST FIPS 203, класс MLKem в .NET • ML-DSA — алгоритм цифровой подписи, поддерживаемый NIST FIPS 204, класс MLDsa в .NET • SLH-DSA — алгоритм цифровой подписи, поддерживаемый NIST FIPS 205, класс SlhDsa в .NET • Composite ML-DSA — композитный алгоритм цифровой подписи, поддерживаемый IETF Draft, класс CompositeMLDsa в .NET Переход на PQC заставил переосмыслить архитектуру криптографических классов. Старый базовый класс AsymmetricAlgorithm не соответствовал современным требованиям, например, свойство KeySize стало менее уместным для новых алгоритмов. 🔹 Экспресс-курс «Математика для Data Science» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view

👨‍💻 Когда нужна стабильность, а не спешка Представьте фоновую задачу, которая должна срабатывать каждые 5 секунд: проверка очереди, синхронизация данных, отправка метрик. Можно, конечно, использовать Task.Delay, но это хрупко — если одна итерация длится дольше, чем ожидалось, ритм собьётся. PeriodicTimer решает эту проблему иначе:
var timer = new PeriodicTimer(TimeSpan.FromSeconds(5));
Создаём таймер, который будет срабатывать каждые 5 секунд. Точка отсчёта — момент создания.
while (await timer.WaitForNextTickAsync(ct))
{
    await DoWork(ct);
}
WaitForNextTickAsync ждёт следующего тика таймера. Когда он приходит — выполняем работу. Если работа заняла 1 секунду, следующий тик всё равно придёт через 5 секунд от начала цикла, а не через 6. Это стабильный интервал, а не интервал между завершением одной работы и началом другой. 🔹 Практический интенсив «Архитектуры и шаблоны проектирования» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #il_люминатор

🎉 Большая распродажа Proglib Academy — минус 40% на всё! 📚 Выбирай свой курс: ▫️ «Экспресс-курс по математике для DS» — пол
🎉 Большая распродажа Proglib Academy — минус 40% на всё! 📚 Выбирай свой курс: ▫️ «Экспресс-курс по математике для DS» — получи фундамент для построения успешной карьеры в Data Science ▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными; ▫️ «Основы Python» — чтобы начать писать код с нуля; ▫️ «Алгоритмы и структуры данных» — для будущих инженеров; ▫️ «Специалист по ИИ» или «AI-агенты», или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ. ▫️ «Архитектуры и шаблоны проектирования» — чтобы писать гибкий, масштабируемый код как мидл+ разработчик. ▫️ «Основы IT для непрограммистов» — для тех, кто хочет понимать, как устроены технологии, не будучи разработчиком. 🎁 Бонусы ноября: ▫️ Розыгрыш MacBook Pro 14 — купи любой курс и пройди 2 недели обучения до 30 ноября. ▫️ Бесплатный тест по математике — за 5 минут покажет, какие темы стоит подтянуть перед DS. 👉 Выбрать курс со скидкой

📎 Частичные события и конструкторы Новый уровень модульности в больших проектах: делим объявление и реализацию. Большие проекты требуют таких гибких способов организации кода. В C# теперь можно объявлять события и конструкторы с модификатором partial. Это значит, что объявление может находиться в одном месте, а его реализация — в другом, обычно в другом файле:
public partial class MyClass
{
    partial void OnInitialized();

    public MyClass()
    {
        OnInitialized();
    }
}
Здесь объявлена частичная функция OnInitialized() без тела — её реализация может появиться отдельно. Также конструктор вызывает эту функцию, если она реализована. Частичные конструкторы поддерживают совместимость с платформами, использующими генерацию кода. 🐸Библиотека шарписта #il_люминатор

🧑‍💻 Контролируем параллельную работу Представьте ситуацию: у вас есть 1000 элементов для обработки, и вы хотите запустить это параллельно. Но если просто запустить все одновременно, приложение упадёт — будет слишком много одновременных подключений к БД, API или файловой системе. Здесь помогает SemaphoreSlim. Как это работает Создаём семафор с лимитом 4. Это значит, что максимум 4 потока могут находиться внутри защищённого блока одновременно.
await gate.WaitAsync(ct);
Поток ждёт в очереди, пока не появится "место". Если уже 4 потока внутри — новичок подождёт:
await gate.WaitAsync(ct);
После обработки обязательно вызываем Release() — это освобождает место для следующего потока. finally гарантирует, что это произойдёт даже если операция упадёт:
try { await Process(x, ct); }
finally { gate.Release(); }
Вместо 100 одновременных загрузок будет ровно столько, сколько вы укажете. 🔹 Алгоритмы и структуры данных 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #il_люминатор

⚡️ Директивы #warnon и #nowarn в F# В предыдущих версиях F# часто возникала проблема — как избавиться от мешающих предупрежде
⚡️ Директивы #warnon и #nowarn в F# В предыдущих версиях F# часто возникала проблема — как избавиться от мешающих предупреждений без потери важной информации по всему файлу. С выходом F# 10 в язык добавлены новые директивы #warnon и #nowarn, которые позволяют точно управлять уровнем сообщений о предупреждениях внутри конкретных участков кода. Что такое #warnon и #nowarn Это специальные директивы, которые позволяют включать или отключать предупреждения на уровне отдельных блоков кода. Теперь можно не отключать все предупреждения сразу, а подавлять или включать их только там, где действительно нужно — прямо внутри файла или скрипта. Как это работает на практике:
#nowarn 25

let f (Some a) = 
    // тут предупреждение FS0025 отключено
    ...

#warnon 25
// здесь предупреждение активировано снова
Теперь предупреждение FS0025 отключено только в этом участке и не влияет на остальной код. 🔹 Практический интенсив «Архитектуры и шаблоны проектирования» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека шарписта #sharp_view