Библиотека шарписта | C#, F#, .NET, ASP.NET
21.8K subscribers
2.87K photos
44 videos
91 files
5.31K links
Все самое полезное для C#-разработчика в одном канале.

Наши курсы: https://clc.to/y3LDtw

По рекламе: @proglib_adv

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
💡 StartsWith('s') лучше, чем StartsWith("s")

Если ищете один символ, используйте перегрузку с char:


text.StartsWith(’s’);


вместо:


text.StartsWith(«s»);


То же самое касается:


text.EndsWith('s');
text.IndexOf(’s’);


Перегрузки с char обычно немного эффективнее и сразу показывают, что поиск идёт по одному символу.

📌 Для одного символа — char, для строки или подстроки — string.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84🥱4
Уже сегодня в 19:00 (МСК) стартует наш открытый урок!

Знаем, летом хочется отложить учёбу на осень. Но пока остальные отдыхают 😅, мы предлагаем без лишней конкуренции прокачать свой workflow и начать закрывать тикеты в три раза быстрее.

Тема:
«AI-инструменты в разработке: пишем код быстрее»


Мы покажем живой разбор реального проекта: как с помощью AI-ассистентов мгновенно разбираться в чужой кодовой базе, искать нужные участки и собирать Pull Request. Только рабочие промпты, которые сэкономят вам часы рутины.

🎙 Спикер — Ольга Лукьянова, руководитель команды в SourceCraft (18+ лет развивала инструменты в JetBrains и Huawei).

👉 Узнать, как ускорить разработку с AI
🔥2
LINQ in Csharp - beyond the basics.jpeg
85.5 KB
🔗 LINQ за пределами Where() и Select()

Большинство разработчиков регулярно используют лишь небольшую часть LINQ. Но за последние версии .NET коллекция операторов заметно выросла.

На шпаргалке собраны методы, которые часто упрощают код:

🔹 DistinctBy() — убрать дубликаты по ключу
🔹 Chunk() — разбить последовательность на пачки
🔹 MaxBy() / MinBy() — получить элемент по максимальному или минимальному значению ключа
🔹 CountBy() — посчитать элементы по группам
🔹 AggregateBy() — агрегировать данные по ключу за один проход
🔹 SelectMany() — развернуть вложенные коллекции
🔹 ToLookup() — построить быстрый lookup по ключу
🔹 Zip() — объединить две последовательности попарно


📌 Если до сих пор используете GroupBy(...).Count() или пишете собственную логику для поиска максимального элемента — возможно, в LINQ уже есть готовый оператор.

🔗 Источник

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#схема
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🥱42
🤷‍♂️ Почему сборщик мусора делит объекты на поколения

GC в .NET не сканирует всю кучу при каждой сборке. Он опирается на простое наблюдение: большинство объектов живут очень недолго. Временные строки, локальные коллекции, промежуточные результаты вычислений часто умирают почти сразу после создания.

Поэтому управляемая куча разделена на поколения.

🟢 Gen0 — сюда попадают новые объекты. Сборка происходит часто и быстро.

🟢 Gen1 — промежуточное поколение для объектов, переживших сборку Gen0.

🟢 Gen2 — долгоживущие объекты: кеши, синглтоны, крупные структуры приложения. Проверяется значительно реже.


Такой подход позволяет GC большую часть времени работать только с небольшим количеством свежих объектов, не тратя ресурсы на всю кучу целиком.

🔜 Отдельно существует LOH (Large Object Heap). Туда попадают крупные объекты размером примерно от 85 КБ, чаще всего большие массивы. LOH обычно не уплотняется при обычных сборках, поэтому со временем может фрагментироваться.

Практический вывод:

уменьшайте количество временных объектов на горячих путях;
избегайте лишних аллокаций в циклах;
переиспользуйте большие буферы через ArrayPool<T>, чтобы не нагружать LOH.

📚 Что почитать дальше:

«Фундаментальные основы сборщика мусора .NET» — один из лучших материалов для понимания поколений, LOH, режимов работы GC и причин пауз при сборке мусора.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍124🔥3
🧩 Проверка аргументов на null в современном C#

До .NET 6 проверки обычно выглядели так:


if (arg is null)
throw new ArgumentNullException(nameof(arg));


Сейчас для этого есть встроенный метод:

ArgumentNullException.ThrowIfNull(arg);


Что он даёт:

меньше шаблонного кода
автоматически подставляет имя параметра
единый стиль проверок по всему проекту
проще читать и поддерживать

Например:

 public UserService(IRepository repository)
{
ArgumentNullException.ThrowIfNull(repository);

_repository = repository;
}


Под капотом используется специальная реализация для guard clauses, поэтому этот вариант не только короче, но и хорошо оптимизируется рантаймом.

Используете ThrowIfNull() или по привычке всё ещё пишете if (arg is null)

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍5🥱2
👀 Умеете строить предсказуемую архитектуру с ИИ? Станьте спикером Proglib academy

Мы в Proglib.academy запускаем курс по Spec-Driven Development (SDD) — учим разработчиков управлять ИИ-агентами (Cursor, Copilot, Claude) через спецификации, контекст и тесты, чтобы не перепроверять за нейросетью каждую строку.

Для этого курса мы ищем классных спикеров-практиков.


➡️ Что требуется от вас?

BigTech бэкграунд: опыт работы разработчиком, тимлидом или архитектором в крупных технологических компаниях.
Опыт управляемой разработки с ИИ: вы на практике знаете, как встроить AI-инструменты в личный или командный workflow (от постановки задачи до ревью AI-кода).
Системный подход: умение превращать хаотичную генерацию кода в предсказуемый инженерный процесс (работа с архитектурой, чек-листами, легаси и покрытием тестами).

➡️ Что мы предлагаем?

● Достойную оплату за подготовку материалов и проведение занятий.
● Мощное продвижение личного бренда через медиаресурсы Proglib (наша аудитория — 1 млн+ айтишников).
● Возможность публиковать свои экспертные материалы и статьи на наших площадках.
● Доступ к сильному и закрытому профессиональному сообществу.

Также мы ищем консультанта программы.

Если вы практикующий эксперт и готовы помочь нам отвалидировать программу курса, дать рекомендации по актуальности тем и финальным результатам обучения — мы вас очень ждем.

➡️ Как с нами связаться:

Telegram: @alinaa_kh
E-mail: alina@proglib.io
Please open Telegram to view this post
VIEW IN TELEGRAM
😳 Минимальные API или контроллеры

С появлением минимальных API многие начали отказываться от контроллеров. Меньше шаблонного кода, эндпоинт виден целиком, проще стартовать новый сервис.

🔜 Но контроллеры никуда не исчезли. Для крупных проектов многим по-прежнему нравится привычная структура, группировка логики и накопленные практики команды.

А как у вас?

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🤖 Запускаем новый курс: «Spec-Driven Development»!

Всем надоело, что ИИ-агенты (Cursor, Claude) генерируют сотни строк хаотичного кода, который приходится переписывать. Дело не в нейросети, а в том, что вы заставляете её угадывать условия задачи.

На курсе вы освоите методологию SDD (Spec-Driven Development) — управление ИИ через спецификации (спеки) и тесты вместо «вайб-кодинга».

Как это работает?

До генерации кода вы фиксируете в спеке контракты, инварианты и граничные случаи. Документ четко определяет ЧТО делать, сводя лотерею в PR к нулю.

За 8 недель с экспертами из BigTech вы:

🔹 Встроите ИИ в личный или командный workflow.
🔹 Превратите генерацию кода в предсказуемый инженерный процесс.
🔹 Перестанете перепроверять за моделями каждую строчку.

📖 Полный разбор методологии с примерами и готовый промпт для генерации спеки — в нашей статье

👉 Освоить SDD и ускорить разработку
🔥2
🎬 Где ломаются архитектуры ИИ-агентов и как этого избежать: запись урока от Proglib.Academy и cloud․ru

Proglib.аcademy вместе с cloud․ru провели вебинар, где разобрали реальные боли проектирования автономных систем. Вы просили запись встречи — она уже в открытом доступе!

Что внутри:

— критерии выбора между одним агентом и мультиагентной системой;
— разбор популярных архитектурных ошибок;
— реальные ограничения современных ИИ-агентов;
— практические рекомендации по проектированию агентных систем.

👉 Посмотреть запись можно тут:
VK
YouTube
🔥2
Когда баг воспроизводится только по пятницам после обеда и только на проде 😎

🐸 Библиотека шарписта

#garbage_collector
Please open Telegram to view this post
VIEW IN TELEGRAM
😁254🔥2
Что выводит Console.WriteLine("Hello".ToUpper());?

👾
— HELLO
👍 — hello
🥰 — Error
⚡️ — Ничего из вышеперечисленного

Библиотека задач по C#
👾213🥱16🥰6🌚31
💡 Пагинация в EF Core: Skip/Take не всегда лучший выбор

Самый популярный вариант пагинации в EF Core выглядит так:


var customers = await dbContext.Customers
.AsNoTracking()
.Where(c => c.IsActive)
.OrderBy(c => c.Id)
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.ToListAsync();


🔵 Под капотом EF Core генерирует SQL с OFFSET/FETCH:


SELECT *
FROM Customers
ORDER BY Id
OFFSET 200 ROWS
FETCH NEXT 100 ROWS ONLY


Для небольших таблиц этого обычно достаточно.

❗️ Но есть нюанс: чем дальше страница, тем больше строк СУБД приходится пропускать перед возвратом результата.
Поэтому для больших таблиц и бесконечной прокрутки часто используют Keyset Pagination:


var customers = await dbContext.Customers
.Where(c => c.Id > lastSeenId)
.OrderBy(c => c.Id)
.Take(pageSize)
.ToListAsync();


Такой подход не требует пропускать тысячи строк и обычно масштабируется заметно лучше.

📌 Простая навигация по страницам → Skip/Take
📌 Большие таблицы и высокая нагрузка → Keyset Pagination

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍135🔥5🤔3
pattern matching in csharp.jpg
69.9 KB
❗️ Pattern Matching — одна из тех возможностей C#, которая делает код заметно чище

Вместо проверки типа с последующим приведением можно выполнить обе операции сразу в одном выражении. Меньше шаблонного кода, безопаснее приведение типов и лучше читаемость.

На картинке — простой пример, который стоит взять на вооружение, если ещё пишете код «по-старому» 👀

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🥱5🔥1
🚀 Не уверены, стоит ли переходить на зрелую ИИ-инженерию? Начните с демо-урока!

Вот-вот стартует наш курс AgentOps. Если вы сомневаетесь в формате, просто оставьте заявку и получите бесплатный демо-урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».

Для тех, кто готов мощно прокачать портфолио, прямо сейчас действует предложение «3 любых курса по цене 1»:
— При покупке VIP-тарифа (осталось 4 места) нового потока «ИИ-агенты» вы получаете в подарок доступ к курсу «AgentOps» + ещё один любой курс Академии на выбор

— В деньгах это два топовых курса по автоматизации и контролю ИИ всего за 134.000 ₽ вместо 263.000 ₽ 🔥 А за счет третьего курса (например, можно выбрать «Математику») вы соберете мощный стек и освоите целое востребованное направление.

— Платеж можно разбить на несколько частей с помощью беспроцентной рассрочки.


👉 Получить демо-урок и зафиксировать спецпредложение 3 в 1
🔥32🥱2
⭐️ Асинхронность постепенно переезжает в рантайм

Начиная с C# 5, async/await работал за счёт компиляторной машины состояний. Компилятор превращал каждый асинхронный метод в специальную структуру, которая хранила состояние между точками await.

В .NET 11 появилась Runtime Async — новая реализация, которая переносит значительную часть этой инфраструктуры в сам рантайм. Библиотеки .NET уже начинают использовать новый механизм там, где он поддерживается.

Что это даёт:

более чистые стек-трейсы без лишних кадров машины состояний;
меньше служебного кода и накладных расходов;
более эффективное возобновление выполнения после await.

В документации Microsoft приводится синтетический бенчмарк с большим количеством приостановок и возобновлений, где время выполнения снизилось примерно с 6357 мс до 457 мс 🌈

Пока функция находится в статусе preview. Для своих проектов её можно включить через секцию Features с параметром runtime-async=on. Для net11.0 отдельный флаг EnablePreviewFeatures уже не требуется.

🔗 Microsoft Learn — What’s new in .NET 11 Runtime

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥255
⚠️ Уже завтра стартует курс AgentOps!

Мы собрали на потоке сборную из мастеров IT-рынка. Практики из BigTech научат вас контролировать и отлаживать ИИ-агентов, чтобы они работали предсказуемо и не сливали бюджет на API.

🔥 Заберите 3 курса по цене 1:
● При покупке VIP-тарифа (осталось 4 места) нового потока «Разработка ИИ-агентов» получаете в подарок курс «AgentOps» + ещё один любой курс Академии (например, «Математика для разработки AI», чтобы глубже освоить направление).

● Три курса обойдутся вам всего в 134.000 ₽ вместо 263.000 ₽.

● Доступна удобная беспроцентная рассрочка, платеж можно разбить на несколько комфортных частей.


Хотите прокачать свое портфолио продакшн-кейсом, но пока сомневаетесь? Пройдите наш бесплатный демо-урок, чтобы протестировать формат перед покупкой.

👉 Забрать 3 курса по цене 1 и получить демо-урок
2
📌 Hexagonal Architecture за 5 минут

Эта схема кажется перегруженной только на первый взгляд. На самом деле она показывает одну из самых популярных архитектур современных .NET-приложений.

Здесь собраны ключевые идеи: Ports & Adapters, DDD, CQRS, инверсия зависимостей и разделение приложения на доменную логику и инфраструктуру.

🔜 Сохраните, если давно хотели разобраться, почему доменная модель не должна зависеть от EF Core, HTTP или RabbitMQ.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2🔥2😁1
ОПРОС: Ответьте на пару вопросов и получите промокод на все наши курсы! 🎁

Команда Prоglib.аcаdemy готовит к запуску новые продукты, и нам нужна ваша помощь. Мы хотим создавать обучение, которое будет решать ваши реальные карьерные задачи и бить точно в цель.

Поделитесь своим опытом и ожиданиями, чтобы мы сделали наши курсы еще полезнее именно для вас! Заполнение анкеты займет буквально 2–3 минуты, а с нас — скидка на любой наш курс!

👉 Пройти опрос в Яндекс Формах и забрать промокод
🔥1
⭐️ Автоматическая регистрация Minimal API через DI

Вместо того чтобы вручную вызывать десятки MapGet() и MapPost(), можно зарегистрировать все endpoint автоматически.

Идея простая:

1️⃣ каждый endpoint реализует общий интерфейс;
2️⃣ приложение находит все реализации через DI;
3️⃣ при запуске вызывает Map() для каждой.

В результате Program.cs сводится буквально к двум строкам:


builder.Services.AddEndpoints(typeof(Program).Assembly);

app.MapEndpoints();


Чем больше проект, тем заметнее становится преимущество такого подхода.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰43💯2🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
📹 Что должен делать агент-оркестратор?

Посмотрите короткий отрывок из вебинара с Дмитрием Юдиным, внутри концентрат инсайтов о ии-агентах. А если хотите погрузиться в тему с головой, у нас доступна и полная запись этого эфира.

Готовы перейти от теории к практике и собрать свой первый продакшн-кейс?

Прямо сейчас действует мощная акция «3 курса по цене 1»:

🔥 При покупке VIP-тарифа нового потока «Разработка ИИ-агентов» вы получаете в подарок хардкорный курс «AgentOps» + ещё один любой курс Академии на ваш выбор!

Выгода в цифрах: два топовых курса по созданию и контролю агентов обойдутся вам всего в 134.000 ₽ вместо 263.000 ₽. Плюс третий курс бонусом (например, можно подтянуть математику для AI). Ваша чистая экономия — 129 000 ₽!

Сомневаетесь, подойдет ли вам формат? Оставьте заявку и пройдите бесплатный демо-урок, чтобы протестировать платформу перед покупкой.

👉 Пройти демо-урок и забрать 3 курса по цене 1