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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
⛄️ Путь к мечте продолжается

Пока вы думаете, что «не хватает времени» или «сложные обстоятельства» — Стас перенёс две нейрохирургические операции, собирает себя по кусочкам, при этом проходит курс по C++, пилит проекты для портфолио и откликается на вакансии.

➡️ Читать продолжение пути Стаса

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

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8💯6
📂 Files для Windows 11 получил интеграцию с PowerToys

Files это популярный сторонний файловый менеджер для Windows 11. В новости пишут, что он получил интеграцию с одной из самых удобных утилит PowerToys, которая делает быстрый предпросмотр файлов.

Речь про Peek. Вы выделяете файл и жмёте Ctrl плюс Space, и файл открывается в лёгком окне предпросмотра. Это работает как быстрый просмотр, без запуска отдельного приложения.

➡️ Источник

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

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

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
4👾1
👨‍💻 Ложная иммутабельность

Часто новички в функциональном программировании думают, что сделали иммутабельный код. Берут список, вызывают ToList() или Select() и радуются новому списку. Но в C# это ловушка.

Проблема в ссылочных типах. var copy = original.ToList() создаёт новый List, но все элементы внутри — те же самые объекты. Меняете свойство через copy, и оригинал тоже меняется.

Правило трёх

• Records с init-only свойствами для value-like поведения

• ImmutableList<T> из System.Collections.Immutable — настоящие неизменяемые коллекции

• Struct только для маленьких типов

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

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14😁1🥱1
📎 Методы вместо сеттеров

Открытые геттеры и сеттеры кажутся удобными, но позволяют внешнему коду разрушить внутреннюю логику объекта. Можно предоставлять методы, которые гарантируют соблюдение правил.

Например, в заказе количество позиций не должно быть отрицательным. Но с сеттером любой вызовет orderItem.setQuantity(-1000). Объект становится некорректным, а баги проявятся позже.

Создайте метод, который принимает ID товара и новое значение. Внутри проверьте, что число положительное, обновите поле и пересчитайте сумму.

Пример:
public void ChangeQuantity(string itemId, int newQuantity) {  
if (newQuantity < 0) throw new ArgumentException("Количество не может быть отрицательным");
var item = items.FirstOrDefault(i => i.Id == itemId);
if (item != null) {
item.Quantity = newQuantity;
RecalculateTotal();
}
}


Так внешний код не может нарушить правила. Можно ограничить сеттер проверкой, но множество проверок может сломать принцип единой ответственности.

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

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

#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🤔 Не знаете, в чём встречать Новый год? Не беда!

Tproger как раз собрал стек новогодних нарядов, чтобы вы сияли ярче, чем любая гирлянда. Скорее заходите в виртуальную примерочную и выбирайте скин! 💃

Реклама. ИП Михайлишина Гузель Фаниловна.
ИНН 165042823905. Erid 2VtzqukJLdp
😁3
📅 Даты и время в .NET без сюрпризов

В .NET есть разные типы под разные задачи, и из этого обычно и растут ошибки. DateTime это просто дата и время, но без явного смещения. DateTimeOffset хранит дату, время и смещение от UTC, поэтому однозначно задает момент времени.

Для часовых поясов используйте TimeZoneInfo, Microsoft прямо пишет, что для новой разработки лучше TimeZoneInfo вместо старого TimeZone.

var nowUtc = DateTimeOffset.UtcNow;
var moscow = TimeZoneInfo.FindSystemTimeZoneById("Europe/Moscow");
var nowMoscow = TimeZoneInfo.ConvertTime(nowUtc, moscow);

Console.WriteLine(nowUtc);
Console.WriteLine(nowMoscow);


TimeZoneInfo умеет переводить время между часовыми поясами, а DateTimeOffset делает момент переносимым между машинами и окружениями.

Еще два полезных типа. DateOnly для календарной даты без времени, например отпуск или дата рождения. TimeOnly для времени без даты, например расписание.

var vacation = new DateOnly(2026, 1, 10);
var standup = new TimeOnly(10, 30);

Console.WriteLine(vacation);
Console.WriteLine(standup);


DateOnly и TimeOnly заменяют костыли с DateTime и TimeSpan, когда вам не нужен момент времени.

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

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍171
🎄 Социальный опрос айтишников

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

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

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

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

#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
У вас есть ёлка дома
Anonymous Poll
56%
Да
37%
Нет
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❤‍🔥46🎉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
👍239🔥2225👾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
7👍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🔥3🥱2🌚1
💡 Красочно про LINQ

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

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

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

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

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

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

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

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

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

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

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

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