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

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

Учиться у нас: https://proglib.io/w/b60af5a4

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🎄 Социальный опрос айтишников

Есть два типа людей: те, кто ставит ёлку в начале декабря и наслаждается атмосферой целый месяц, и те, кто украшает её 31-го под бой курантов.

💬 Скидывайте фото своих ёлок в комменты 👇

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

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

#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
У вас есть ёлка дома
Anonymous Poll
57%
Да
36%
Нет
7%
Не скажу
🎄 С Новым годом, шарписты!

var year = new Year(2026);
year.Wishes = new[] { "чистый код", "нулевой техдолг", "стабильный прод" };

while (year.InProgress)
{
await you.Ship(Features.Amazing);
await you.Avoid(Bugs.Critical);
you.Happiness++;
}


🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
28❤‍🔥45🎉11
🎆 Праздники — время лучшего контента 2025

Новый год наступил, но мы не уходим на каникулы. Все праздники публикуем топовые посты года — те, что вы сохраняли в закладки и пересылали коллегам.

➡️ Ежедневные порции лучшего по хэштегу #лучшее_из_библиотеки_2025

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

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👀 Какую IDE выбрать для C# в 2026

Мы уже поднимали тему выбора IDE. Сейчас повторим, потому что смена IDE часто совпадает с переходом на новый проект или новый стек.

👍 За Visual Studio
🔥 За Rider
Остальное в комменты 👇

💬 Что у вас сейчас в роли основной IDE и что бесит больше всего в выбранном варианте?

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍233🔥2185👾2
#️⃣ Async Task в Unity против корутин

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

Поэтому если внутри корутины сделать блокирующую работу, игра встанет.

➡️ Освежить статью в памяти

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
⚡️ Асинхронная обработка в C#

Тогда мы уже рассказывали про IAsyncEnumerable и await foreach. Сейчас повторяем, потому что это одна из тех фич, которую многие видели, но мало кто применяет осознанно.

Асинхронные потоки IAsyncEnumerable позволяют эффективно обрабатывать последовательности данных, поступающих с задержками. В целом это положительно влияет на пользовательский опыт и скорость работы приложения

1. Базовый синтаксис:
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

static async IAsyncEnumerable<int> GenerateSequenceAsync(int count, [EnumeratorCancellation] CancellationToken token = default)
{
for (int i = 0; i < count; i++)
{
// Симулируем асинхронную задержку
await Task.Delay(100, token);
yield return i;
}
}

static async Task ConsumeAsync()
{
await foreach (var item in GenerateSequenceAsync(5))
{
Console.WriteLine($"Получено значение: {item}");
}
}


• Ключевое слово async перед IAsyncEnumerable<T>.

yield return внутри асинхронного метода.

await foreach для потребления.

2. Обработка отмены и ошибок:
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(1));
try
{
await foreach (var item in GenerateSequenceAsync(10, cts.Token).WithCancellation(cts.Token))
{
Console.WriteLine(item);
}
}
catch (OperationCanceledException)
{
Console.WriteLine("Операция была отменена.");
}


• Передаём CancellationToken через атрибут [EnumeratorCancellation].

• Используем метод расширения .WithCancellation(token) для явной поддержки отмены в await foreach.

3. Советы по применению

• Всегда учитывайте семантику отмены: пробрасывайте CancellationToken до источника потока.

• Избегайте долгих синхронных операций внутри цикла генерации — это сведёт на нет преимущества асинхронности.

• При больших объёмах данных комбинируйте с буферизацией через Channel<T> для сглаживания пиковой нагрузки.

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍1
🎮 Память в Unity и лаги, что реально чинит FPS

Мы делились этой статьей, и сейчас напомним. Главная мысль простая, лаги часто приходят не из за рендера, а из за памяти и резких скачков GC.

➡️ В статье объясняют, почему аллокации и сборщик мусора могут давать фризы и как с этим жить

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
🥇 Золотая лихорадка закончилась

2025-й стал годом «скучной стабильности» в айти. Компании не росли — выживали: резали бюджеты, оптимизировали команды, затягивали найм.

2383 отклика на 1 вакансию.
−20% позиций за год.
30-50% сокращений в e-commerce.

➡️ Полный разбор рынка

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

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
😢23🤔1🤩1
🧑‍💻 Универ, курсы или самоучка

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

➡️ Если хочется курсы, можно посмотреть, что есть в Proglib Academy.

💬 А у вас что сработало, универ, курсы или самообучение, и почему?

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
От монолитов к мультиагентным системам на C#

Интеграция LLM в .NET проекты — это уже не только Semantic Kernel. В 2026 году фокус смещается на создание автономных команд агентов, использующих паттерн ReAct.

На курсе «Разработка AI-агентов» мы разбираем, как строить такие системы профессионально.

В программе:

— архитектура «мозга» агента: связка Reasoning + Acting;
— оркестрация через n8n и работа с внешними API;
— протокол MCP от Anthropic для мультиагентного взаимодействия;
— глубокие системы поиска знаний (RAG) для работы с документами.

Это твой шанс войти в рабочий ритм с технологиями будущего.

🧨 До 12 января действует акция «3 в 1»: курс по ИИ-агентам + 2 курса в подарок.

Начать обучение
😢5🔥2🥱2🌚1
💡 Красочно про LINQ

Вспоминаем лучшую шпаргалку 2025 по методам LINQ.

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🥱135😁4🔥3
Сколько задач нарешали за 2025 год

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13
🎮 DI в Unity, чтобы проект не слипся в комок

Мы уже кидали этот материал в ленту в начале года, и сейчас напомним его снова. В Unity код часто завязывается на MonoBehaviour и Scene, из за этого зависимости расползаются и тестировать становится больно.

➡️ Статья как раз объясняет, почему с DI в Unity все не так гладко, как в обычном C#

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32😁1
🤨 Неочевидная проблема FirstOrDefault

Метод FirstOrDefault из LINQ часто вводит в заблуждение разработчиков. Он берёт первый элемент из последовательности или выдаёт дефолтное значение типа, когда список пуст. Для структурных типов вроде int это 0, для ссылок null.

Возьмём пустой List<int>. Вызов numbers.FirstOrDefault() отдаст 0, и если в бизнес-логике 0 значит нет данных, код сломается тихо.

var numbers = new List<int>();
var result = numbers.FirstOrDefault(); // 0, а не то, что ожидали


Чтобы фиксить, проверяйте Any() заранее или цепляйте DefaultIfEmpty(-1). Тогда для пустоты выйдет контролируемое значение, код станет предсказуемым.

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🥱10
👨‍💻 Давайте вновь поспорим, нужны ли комментарии в коде

💯 — Нужны
⚡️ — Можно и без них

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
💯8545
💡 Рейтинг TIOBE за декабрь

Остальные языки теряют позиции и поднимаются вверх, а C# стабильно держит своё 5 место.

➡️ Рейтинг

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

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

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12😁42
💾 Как выбрать стратегию кэширования: разбор 7 популярных алгоритмов

Кешировать нужно с умом. И нет, LRU — не серебряная пуля.

В статье вас ждёт разбор алгоритмов: LRU, LFU, FIFO и другие
– Примеры, где каждый работает лучше
– Плюсы и минусы подходов
– Практические советы по выбору стратегии

Если проектируете систему с большими нагрузками или оптимизируете производительность — материал будет как раз.

➡️ Читать статью

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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4🔥1
🤩 Паттерн-матчинг в C#

Pattern-matching — это функциональность языка, позволяющая проверять объект на соответствие определённому шаблону и выполнять действия, если объект удовлетворяет этим условиям.

Этот механизм помогает писать более читабельный и компактный код, устраняя необходимость в громоздких конструкциях вроде if-else или switch.

Паттерн-матчинг в C# активно развивается с каждой новой версией языка и поддерживает множество типов паттернов, таких как:

1️⃣ Проверка типа

Используется для проверки типа объекта и его преобразования в этом же выражении:
object obj = "Hello, world!";
if (obj is string str)
{
Console.WriteLine($"Длина строки: {str.Length}");
}


2️⃣ Константные паттерны

Проверяет значение переменной на соответствие константе:
int number = 42;
if (number is 42)
{
Console.WriteLine("Число равно 42");
}


3️⃣ Реляционные и логические паттерны

Сравнивает значения и комбинирует паттерны с помощью логических операторов (and, or, not):
int age = 25;
if (age is > 18 and < 30)
{
Console.WriteLine("Возраст в диапазоне от 18 до 30");
}


4️⃣ Паттерны в выражении switch

Улучшает конструкцию switch, позволяя использовать сложные условия:
object shape = new Circle { Radius = 5 };

string description = shape switch
{
Circle { Radius: > 0 } c => $"Круг с радиусом {c.Radius}",
Rectangle { Width: > 0, Height: > 0 } r => $"Прямоугольник {r.Width}x{r.Height}",
_ => "Неизвестная форма"
};



5️⃣ Свойственные паттерны

Позволяют проверять свойства объекта:
Person person = new Person { Name = "Alice", Age = 30 };

if (person is { Name: "Alice", Age: > 25 })
{
Console.WriteLine("Это Алиса старше 25 лет");
}


6️⃣ Список и позиционные паттерны

Используются для проверки списков и кортежей:
int[] numbers = { 1, 2, 3 };

if (numbers is [1, 2, 3])
{
Console.WriteLine("Массив содержит 1, 2, 3");
}


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

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

#лучшее_из_библиотеки_2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🥱2👾1