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

Как запустить своего ии-агента: https://clc.to/tvpmDQ

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🤔 Middleware, Endpoint Filter или Policy Pipeline

Почти в каждом ASP.NET Core-проекте возникает один вопрос: куда выносить новую логику

Проверки доступа, feature flags, комплаенс, торговые часы и региональные ограничения со временем превращают хендлеры в набор бесконечных if.

➡️ В карточках разберём, чем отличаются Middleware, Endpoint Filters и Policy Pipeline, и в каких случаях использовать каждый из них.

🔗 Ссылка

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

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

#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍5
the complete csharp 2026 cheat sheet.jpeg
185.4 KB
💡 Что должен знать C#-разработчик

От async/await и LINQ до GC, многопоточности, рефлексии и управления памятью — экосистема .NET становится всё шире с каждым релизом.

➡️ Нашли большую шпаргалку, которая собирает ключевые темы C# и .NET в одном месте. Удобно для подготовки к собеседованию, систематизации знаний или поиска тем для изучения ⚡️

🔗 Источник

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

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

#схема
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🧩 Разбор задачи

Правильный ответ: Будет выброшен InvalidOperationException

Многие ожидают, что новый элемент просто добавится в список и цикл продолжит работу. Но внутри foreach используется Enumerator, который запоминает версию коллекции на момент начала обхода.

После выполнения:

users.Add(4);


версия списка изменяется.

➡️ При следующем вызове MoveNext() Enumerator обнаруживает, что коллекция была изменена после начала обхода, и выбрасывает исключение:

System.InvalidOperationException: Collection was modified; enumeration operation may not execute.


Исключение возникает не в момент Add(), а при попытке перейти к следующему элементу коллекции.

Например, такой код:


{
Console.WriteLine(user);

if (user == 2)
users.Add(4);
}


успеет вывести:

1
2


и только после этого завершится с ошибкой.

💡 Это поведение характерно не только для List<T>, но и для большинства коллекций .NET, включая Dictionary<TKey, TValue>, HashSet<T> и другие.

Если во время обхода нужно изменять коллекцию, используйте цикл for, работайте с копией через ToList() или накапливайте изменения отдельно.

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

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

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83👾2
😎 Знакомьтесь с экспертом Proglib.academy: Senior Software Engineer и Team Lead в Yandex Cloud Роман Барлос

Роман — консультант нашего курса «Разработка ИИ-агентов». Он работает на стыке cloud-native архитектуры и AI, активно внедряя современные ИИ-подходы в реальные процессы разработки.

За что его ценит IT-комьюнити?


🟣 Team Lead и AI-евангелист в команде UX Yandex Cloud
14-лет в разработке. Занимается AI-адопшеном в команде Yandex Cloud, проводит мастер-классы и продвигает лучшие практики для повышения эффективности разработчиков.


🟣 Техлид Sourcecraft Code Assistant
С сильным практическим бэкграундом принимал участие как технический лид в создании мощного AI-расширения для VS Code.


🟣 Создатель полезного Open Source
Разрабатывает утилиты, которые позволяют быстро начать эксперименты с инференсом и агентами в локальном окружении: например, набор скриптов vllm-setup для быстрого запуска окружения и mini-proxy — минималистичный прокси для OpenAI API провайдеров.


🟣 Автор интерактивных ML-визуализаций
Объясняет сложные концепции наглядно. Создал серию залипательных обучающих материалов, где можно вживую пощупать работу сетей Хопфилда, машин Больцмана и VC-размерности.


Роман регулярно делится инженерными наработками, инсайтами и экспертизой в своем авторском Telegram-канале

На курсе Роман выступает консультантом программы: он помогает формировать содержание уроков с опорой на актуальные инженерные практики и жесткие требования индустрии.

Узнать больше о программе и разработке автономных систем:
👉 Курс «Разработка ИИ-агентов»

Так, продолжаем знакомить вас с командой?
👍 — Да, ждем новых лиц
🔥 — Жду полезные материалы от Романа
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Когда добавил CultureInfo.InvariantCulture и больше не ищешь баги, которые воспроизводятся только у пользователей из Германии 😎

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

#garbage_collector
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17👍5🥰3
🔥 Инженерная методичка по ИИ от Романа Барлоса (Team Lead в Yandex Cloud)

Продолжаем делиться экспертизой команды курса «Разработка ИИ-агентов».

Роман собрал мастхев-инструменты и ключевые работы для тех, кто хочет выйти за рамки вайбкодинга.

🛠 Полезные инструменты:
Understand Anything — граф знаний по коду и зависимостям.
DeepTutor — open-source платформа для персонализированного обучения.
Superpowers — набор практик для системной разработки с ИИ.
Awesome Agent Skills — коллекция навыков для ИИ-агентов.


📚  Ключевые работы по LLM:
Attention Is All You Need (2017) — архитектура Transformer.
GPT-1 (2018) — начало эпохи GPT.
GPT-2 (2019) — решение новых задач без дообучения.
GPT-3 (2020) — обучение на примерах из запроса.
InstructGPT (2022) — RLHF и современные чат-боты.


На курсе Роман выступает консультантом программы: помогает формировать содержание уроков с опорой на актуальные инженерные практики».

Занять свое место на потоке:

👉 Курс «Разработка ИИ-агентов»
3👏2🥰1
💡 Если свойству нужна небольшая логика, больше не обязательно заводить отдельное поле

Раньше приходилось писать так:


private string _email;

public string Email
{
get => _email;
set => _email = value.Trim().ToLowerInvariant();
}


Начиная с C# 14 можно использовать field — ссылку на автоматически сгенерированное backing field:


public string Email
{
get;
set => field = value.Trim().ToLowerInvariant();
}


Подходит для:

валидации значений
нормализации данных
INotifyPropertyChanged
небольшой логики в get/set

⚠️ Если в классе уже есть член с именем field, внутри аксессора приоритет получит новое ключевое слово. Для обращения к своему члену используйте @field или this.field.

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

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
11
🤔 Нужен ли MediatR современному .NET-проекту

В видео разбирают, как реализовать аналог pipeline behaviors через стандартный DI-контейнер без дополнительной зависимости.

Обсуждаются:

— зачем вообще нужен MediatR
— когда он действительно полезен
— как заменить его встроенными инструментами .NET
— какие компромиссы появляются при таком подходе


🔗 Смотреть по ссылке

P.S. Видео на английском языке, можно включить субтитры 💡

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

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

#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🌚2
🔥 Union types добрались до C#

До сих пор в C# не было встроенного способа описать тип «либо одно, либо другое». Приходилось использовать наследование, object или сторонние библиотеки вроде OneOf.

В .NET 11 Preview появилась экспериментальная возможность — union.


public record class Dog(string Name);
public record class Cat(int Lives);

public union Pet(Dog, Cat);

static string Describe(Pet pet) => pet switch
{
Dog(var name) => $"dog: {name}",
Cat(var lives) => $"cat: {lives}"
};


Что это даёт:

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

Рядом появилась и поддержка закрытых иерархий (closed), которая позволяет компилятору анализировать всех наследников типа и также проверять исчерпывающее сопоставление с образцом.

Пока это preview-функциональность. До релиза .NET 11 синтаксис и детали реализации ещё могут измениться.

Идею union types сообщество просило больше десяти лет. Если фича дойдёт до релиза без серьёзных изменений, моделировать состояния, результаты операций и альтернативные типы станет заметно проще.

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

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

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥302
🔥 Строишь ИИ-агентов? Руководитель AI/ML-направления Сloud․ru покажет, где большинство архитектур ломаются, и как этого избежать.

18 июня в 19:00 совместно с Сloud․ru проведём открытый урок «Мультиагентные системы: почему большинство архитектур переусложнены».

Спикер — Дмитрий Юдин, эксперт по масштабированию и оптимизации вычислительных ресурсов для ML. Под его руководством развивается Evolution AI Factory — цифровая среда для работы с GenAI. Он занимается развитием сервисов генеративного ИИ, инфраструктуры для обучения больших языковых моделей и внедрением интеллектуальных агентов.

Что получишь на уроке:

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

🎁 Для участников урока подготовили промокод на скидку 10 000 ₽.

🗓️ Когда: 18 июня, 19:00 (МСК)

👉 Занять место на открытом уроке
❤‍🔥2🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👏5
🧩 Разбор задачи

Правильный ответ: 10

Многие ожидают увидеть 20, но здесь есть важная деталь:

Counter — это struct, а значит значимый тип (value type).


Когда выполняется:


var c2 = c1;


создаётся не ссылка на объект, а полная копия структуры.

После этой строки в памяти фактически находятся два независимых экземпляра:


c1 -> Value = 10 c2 -> Value = 10


Затем меняется только копия:


c2.Value = 20;


Теперь состояние выглядит так:


c1 -> Value = 10 c2 -> Value = 20


Поэтому вывод будет: 10

💡 Это одно из ключевых отличий struct от class.

Для сравнения, если бы Counter был классом:


public class Counter
{
public int Value;
}


то после:


var c2 = c1;


обе переменные ссылались бы на один и тот же объект, и результатом был бы уже 20.

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

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

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱15👍3❤‍🔥1
💻 3 курса по цене одного — собери стек для оффера в топовую IT-компанию

Для следующего карьерного шага мало писать код. Работодатели ждут не только знания языка, но и понимания архитектуры, алгоритмов, автоматизации, AI-инструментов и агентных систем.

Одно направление закрывает только часть задачи.

Поэтому сейчас мы предлагаем освоить сразу несколько востребованных навыков — выбери любой курс и получи доступ еще к двум бесплатно 🔥

Собери стек навыков под свою цель:

🔹 подготовка к сильным компаниям (алгоритмы, архитектура);
🔹 переход в AI-направление (ИИ-агенты, AgentOps);
🔹 развитие в ML и Data Science (математика, основы ML);
🔹 новый оффер и рост дохода.

Полученные знания применяешь в работе уже во время обучения.

Акция действует 48 часов — 13 и 14 июня.

👉 Переходи на сайт, выбирай курсы и оставляй заявку — за 10 минут поможем собрать комплект под твою цель.
3🥱1
🔗 EqualityComparer.Create. Сравнение по одному полю без лишнего кода

Нужно хранить пользователей в HashSet по email? Убирать дубли через Distinct? Группировать объекты по ключу?
Раньше для этого часто приходилось писать собственный IEqualityComparer<T>.

🔴 В .NET 11 Preview 5 появилась новая перегрузка EqualityComparer<T>.Create, которая позволяет описать сравнение через селектор ключа:


var users = new HashSet<User>(
EqualityComparer<User>.Create(
user => user!.Email,
StringComparer.OrdinalIgnoreCase));

users.Add(new User("ada@example.com", "Ada"));
users.Add(new User("ADA@example.com", "Ada Lovelace"));

Console.WriteLine(users.Count); // 1


Здесь сравнение выполняется по Email без учёта регистра.
Плюс такого подхода в том, что логика равенства остаётся локальной и не требует переопределения Equals и GetHashCode у самого типа.

Работает везде, где принимается IEqualityComparer<T>: HashSet, Distinct, GroupBy, ToDictionary и не только.

⚠️ Пока доступно в .NET 11 Preview 5.

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

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

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍168
🎥 До открытого урока — несколько дней. Подготовили небольшую подборку материалов от нашего спикера Дмитрия Юдина.

Дмитрий руководит AI/ML-направлением в Сloud․ru и развивает Evolution AI Factory — среду для работы с GenAI: от инфраструктуры обучения LLM до внедрения интеллектуальных агентов.

С чего начать:

📺 AI-инструменты для разработчиков — как код, автотесты и ассистенты меняют рутину инженера.
📺 AI-эволюция бизнеса в эпоху генеративных моделей — агентные системы в реальных продуктах.
📺 Разработка мертва? — дискуссия о будущем профессии и роли AI в ней.
📖 Применение LLM в бизнесе — статья Дмитрия о практике внедрения и роли облака.

Одна из ключевых тем Дмитрия — практическое применение агентных систем и их ограничения.

Именно об этом бесплатный урок 18 июня в 19:00: «Мультиагентные системы: почему большинство архитектур переусложнены» 🔥

🎁 Для участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».

👉 Успей занять место на открытом уроке
4🥱3
This media is not supported in your browser
VIEW IN TELEGRAM
🎓 Где потренировать C# бесплатно

Sololearn предлагает интерактивный курс по C# среднего уровня с практическими заданиями и встроенной AI-проверкой решений.

В программе:

— массивы
— ООП
— структуры и enum
— исключения
— работа с файлами
— generics


Подойдёт тем, кто уже знает основы языка и хочет закрепить их на практике.

🔗 Ссылка

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

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6🤔2