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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
😑 Что выведет код

Делегаты в шарпах — штука базовая, но в деталях легко запутаться. Посмотрите на код и предскажите вывод, прежде чем проверять.

➡️ Для любознательных ответ в нашем канале с задачами

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

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

#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱9👍2😢2
🔗 Цепочка конструкторов в C#

Конструкторы вызываются при создании объекта. В C# можно связывать их в цепочку: один конструктор вызывает другой. Это убирает дублирование кода инициализации.​

Представьте класс User с тремя конструкторами:
public class User
{
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
public DateTime Created { get; set; }

// Базовая инициализация
public User()
{
Created = DateTime.Now;
Name = "Гость";
Email = "guest@example.com";
}

public User(string name)
{
Created = DateTime.Now; // Дублируем!
Name = name;
Email = "guest@example.com";
}

public User(string name, string email)
{
Created = DateTime.Now; // Снова дублируем!
Name = name;
Email = email;
}
}


Проблема: Created и дефолтные значения повторяются. Изменить в одном месте нельзя.

Как работает цепочка с this()

Используйте : this(параметры):
public class User
{
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
public DateTime Created { get; set; }

// Главный конструктор - вся логика здесь
public User(string name, string email, int age = 0)
{
Created = DateTime.Now;
Name = name ?? "Гость";
Email = email ?? "guest@example.com";
Age = age;
}

// Цепочка к главному
public User() : this("Гость", "guest@example.com") { }

public User(string name) : this(name, "guest@example.com") { }

public User(string name, string email) : this(name, email, 0) { }
}


Тестируем:
var user1 = new User();                    // Гость, guest, 0
var user2 = new User("Иван"); // Иван, guest, 0
var user3 = new User("Иван", "i@example"); // Иван, i@example, 0
var user4 = new User("Анна", "a@ex", 25); // Анна, a@ex, 25


Все получают Created = Now автоматически

Правила цепочки:

• Должна быть первой в конструкторе:
public User(string name) : this(name, "default")  // OK
{
// Дополнительная логика
}


• Нельзя дважды:
public User() : this("a") : base()  // Ошибка!


Идеально для классов с множеством опциональных параметров. Главное: короткие цепочки и главный конструктор с полной логикой.

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

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱97🤩5😁1
🛍 Microsoft Store из терминала

Windows 11 получила встроенный CLI для Microsoft Store. Команда store ищет, устанавливает и обновляет приложения из Store прямо из командной строки. Быстрее winget и с поддержкой платных приложений.

Команда store покажет все команды. Работает из коробки на Windows 11 версии preview v22511.1401.5.0.

Основные команды

Поиск приложений:
store search vlc
store search "notepad++"
store search powertoys


Похожие приложения:
store similar vlc


Установка:
store install vlc
store install 9NBLGGH4NNS1 # ProductId


Список установленных:
store installed


Обновления:
store updates
store upgrade vlc
store upgrade --all


По сути Store CLI - это winget только для Microsoft Store.

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

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

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🌐 Перенаправляем запросы в ASP.NET

Redirect в ASP.NET перенаправляет пользователя на другой URL с кодом 302 Found. Это временное перемещение, когда браузер каждый раз проверяет исходный адрес.

Основные примеры использования:
// 1. Абсолютный путь
return Redirect("https://example.com");

// 2. Относительный путь
return Redirect("/admin/dashboard");

// 3. Действие контроллера
return RedirectToAction("Edit", "User", new { id = model.Id });

// 4. URL с параметрами
return Redirect($"/products?category={categoryId}");


Redirect подходит для временных переходов. Для постоянных ссылок переходите на RedirectPermanent.

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

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
6
👥 Дайджест 2025

Год завершается, самое время подвести итоги. 2025 принёс нам .NET 10 — юбилейный LTS-релиз.

↪️ .NET 10

Релиз состоялся 11 ноября 2025 года. Сами Microsoft называет его самым производительным, современным и безопасным выпуском платформы.

• Улучшения JIT-компилятора: инлайнинг, девиртуализация методов, оптимизация генерации кода для struct-аргументов.

• Поддержка AVX10.2 для Intel и Arm64 SVE для продвинутой векторизации.

• Улучшения NativeAOT: меньше размер, быстрее запуск.

• Стековая аллокация для маленьких массивов фиксированного размера.

• Встроенная поддержка AI через новый Microsoft Agent Framework

• Постквантовая криптография: добавлена поддержка алгоритмов ML-KEM (FIPS 203), ML-DSA (FIPS 204) и SLH-DSA (FIPS 205).

↪️ C# 14

C# 14 обновили большим количеством фич: ключевое слово field, блоки расширений, partial-конструкторы и события, оператор null-conditional assignment, перегрузку составных операторов присваивания, модификаторы параметров в лямбдах без указания типа.

↪️ F# 10

У нас был цикл постов про обновления F#. От подавления предупреждений до авто-свойств.

↪️ Entity Framework Core 10

• Полная поддержка типа данных vector и функции VECTOR_DISTANCE() для Azure SQL Database и SQL Server 2025

• EF Core 10 добавляет first-class поддержку операторов LeftJoin и RightJoin

• Теперь можно назначать имена фильтрам и управлять ими по отдельности

↪️ ASP.NET 10 и Blazor

• Декларативное сохранение состояния через атрибут [PersistentState]

• Circuit state persistence — пользователи могут возобновить сессию после дисконнекта.

• blazor.web.js теперь сжимается: размер уменьшился на 76% — со 183 KB до ~43 KB.

• Встроенная страница NotFound.razor в шаблонах.

• Полная поддержка OpenAPI 3.1 и YAML-формата для API-документации.

↪️ .NET MAUI 10

• XAML компилируется во время сборки, а не парсится в runtime

• Новый шаблон проекта для интеграции MAUI с .NET Aspire

• Экспериментальная возможность использовать CoreCLR вместо Mono

.NET Aspire

• Команды aspire new, aspire run, aspire config и preview-команды aspire publish/deploy

• Можно определить Aspire AppHost без традиционного project file

• Типизированные клиентские библиотеки для GitHub Models, Azure AI Foundry и OpenAI

↪️ Visual Studio 2026

• Более 5000 исправленных багов и 300 реализованных фич.

• Запуск приложений до 30% быстрее по сравнению с VS 2022

• IDE отвязана от build tools — можно обновлять IDE без влияния на toolchain

• Полная поддержка .NET 10 и C# 14

Год получился насыщенным. Все события можно найти по хэштегу #async_news.

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

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

#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
1👏122
👨‍💻 Рабочее место админа пепси-кодера

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

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

#garbage_collector
Please open Telegram to view this post
VIEW IN TELEGRAM
AI-агенты: почему LangChain и ReAct — это must-have для шарписта 🛠️

Интеграция ИИ в корпоративный софт больше не ограничивается вызовом API. Нужно строить сложные системы с памятью и автономной логикой.

На курсе мы разберём передовой стек разработки мультиагентных систем.

Ключевые темы:

— реализация логики «Reasoning + Acting» для полной автономности;
— использование n8n как мощного визуального оркестратора процессов;
— применение протокола MCP от Anthropic для надёжной связи;
— построение масштабируемого RAG для работы с Big Data.

Создайте систему из нескольких агентов, которая возьмёт на себя сложную аналитику и поддержку клиентов.

Старт курса 🚀
🌐 Постоянные редиректы в ASP.NET

RedirectPermanent работает в контроллерах MVC и Core. Метод отправляет статус 301 Moved Permanently, браузеры кэшируют такой редирект и сразу переходят на новый адрес без повторных запросов к старому.

В контроллере это выглядит просто:
public IActionResult OldPage()
{
return RedirectPermanent("/new-page");
}


Здесь запрос на /old-page уйдет на /new-page с кодом 301. Поисковики обновят индекс и перестанут индексировать старый адрес.

Разница с обычным Redirect в статусе ответа. Redirect (302) говорит «временно перемещено», браузер каждый раз проверяет старый URL. RedirectPermanent (301) фиксирует «навсегда», что экономит трафик и улучшает SEO.

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

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

#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🥰2🤔1
⛄️ Путь к мечте продолжается

Пока вы думаете, что «не хватает времени» или «сложные обстоятельства» — Стас перенёс две нейрохирургические операции, собирает себя по кусочкам, при этом проходит курс по 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
57%
Да
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
👍241🔥2225👾2
#️⃣ Async Task в Unity против корутин

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

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

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

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

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

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