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 866 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 866 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 866
Obunachilar
-624 soatlar
-237 kunlar
-9530 kunlar
Postlar arxiv
🤝 Перестаньте ждать, пока вас найдут Обычный сценарий поиска работы в ИТ до сих пор у многих сводится к загрузке резюме на н
🤝 Перестаньте ждать, пока вас найдут Обычный сценарий поиска работы в ИТ до сих пор у многих сводится к загрузке резюме на несколько площадок и ожиданию, пока система кого то заинтересует. При этом автоматические правила, внутренние фильтры и массовая обработка откликов оставляют кандидата без ответа. Альтернатива в том, чтобы не ограничиваться джоббордами и целенаправленно выходить на людей, которые управляют инженерными командами. Общение с 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