es
Feedback
Библиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

Ir al canal en Telegram

Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Mostrar más

📈 Análisis del canal de Telegram Библиотека шарписта | C#, F#, .NET, ASP.NET

El canal Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 21 708 suscriptores, ocupando la posición 5 953 en la categoría Tecnologías y Aplicaciones y el puesto 30 278 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 21 708 suscriptores.

Según los últimos datos del 28 agosto, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -37, y en las últimas 24 horas de 5, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 16.02%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.85% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 3 478 visualizaciones. En el primer día suele acumular 1 705 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 26.
  • Intereses temáticos: El contenido se centra en temas clave como .net, шарписта, навигация, await, string.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 29 agosto, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.

21 708
Suscriptores
+524 horas
-57 días
-3730 días
Archivo de publicaciones
🎄 С Новым годом, шарписты! var year = new Year(2026); year.Wishes = new[] { "чистый код", "нулевой техдолг", "стабильный про
🎄 С Новым годом, шарписты!
var year = new Year(2026);
year.Wishes = new[] { "чистый код", "нулевой техдолг", "стабильный прод" };

while (year.InProgress)
{
    await you.Ship(Features.Amazing);
    await you.Avoid(Bugs.Critical);
    you.Happiness++;
}
🐸Библиотека шарписта

❓ У вас есть ёлка дома
Anonymous voting

🎄 Социальный опрос айтишников Есть два типа людей: те, кто ставит ёлку в начале декабря и наслаждается атмосферой целый меся
🎄 Социальный опрос айтишников Есть два типа людей: те, кто ставит ёлку в начале декабря и наслаждается атмосферой целый месяц, и те, кто украшает её 31-го под бой курантов. 💬 Скидывайте фото своих ёлок в комменты 👇 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #entry_point

📅 Даты и время в .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

🤔 Не знаете, в чём встречать Новый год? Не беда! Tproger как раз собрал стек новогодних нарядов, чтобы вы сияли ярче, чем лю
🤔 Не знаете, в чём встречать Новый год? Не беда! Tproger как раз собрал стек новогодних нарядов, чтобы вы сияли ярче, чем любая гирлянда. Скорее заходите в виртуальную примерочную и выбирайте скин! 💃 Реклама. ИП Михайлишина Гузель Фаниловна. ИНН 165042823905. Erid 2VtzqukJLdp

📎 Методы вместо сеттеров Открытые геттеры и сеттеры кажутся удобными, но позволяют внешнему коду разрушить внутреннюю логику объекта. Можно предоставлять методы, которые гарантируют соблюдение правил. Например, в заказе количество позиций не должно быть отрицательным. Но с сеттером любой вызовет 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_люминатор

👨‍💻 Ложная иммутабельность Часто новички в функциональном программировании думают, что сделали иммутабельный код. Берут список, вызывают ToList() или Select() и радуются новому списку. Но в C# это ловушка. Проблема в ссылочных типах. var copy = original.ToList() создаёт новый List, но все элементы внутри — те же самые объекты. Меняете свойство через copy, и оригинал тоже меняется. Правило трёх • Records с init-only свойствами для value-like поведения • ImmutableList<T> из System.Collections.Immutable — настоящие неизменяемые коллекции • Struct только для маленьких типов 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

📂 Files для Windows 11 получил интеграцию с PowerToys Files это популярный сторонний файловый менеджер для Windows 11. В нов
📂 Files для Windows 11 получил интеграцию с PowerToys Files это популярный сторонний файловый менеджер для Windows 11. В новости пишут, что он получил интеграцию с одной из самых удобных утилит PowerToys, которая делает быстрый предпросмотр файлов. Речь про Peek. Вы выделяете файл и жмёте Ctrl плюс Space, и файл открывается в лёгком окне предпросмотра. Это работает как быстрый просмотр, без запуска отдельного приложения. ➡️ Источник 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #async_news

⛄️ Путь к мечте продолжается Пока вы думаете, что «не хватает времени» или «сложные обстоятельства» — Стас перенёс две нейрох
⛄️ Путь к мечте продолжается Пока вы думаете, что «не хватает времени» или «сложные обстоятельства» — Стас перенёс две нейрохирургические операции, собирает себя по кусочкам, при этом проходит курс по C++, пилит проекты для портфолио и откликается на вакансии. ➡️ Читать продолжение пути Стаса 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта

🌐 Постоянные редиректы в 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

AI-агенты: почему LangChain и ReAct — это must-have для шарписта 🛠️ Интеграция ИИ в корпоративный софт больше не ограничивае
AI-агенты: почему LangChain и ReAct — это must-have для шарписта 🛠️ Интеграция ИИ в корпоративный софт больше не ограничивается вызовом API. Нужно строить сложные системы с памятью и автономной логикой. На курсе мы разберём передовой стек разработки мультиагентных систем. Ключевые темы: — реализация логики «Reasoning + Acting» для полной автономности; — использование n8n как мощного визуального оркестратора процессов; — применение протокола MCP от Anthropic для надёжной связи; — построение масштабируемого RAG для работы с Big Data. Создайте систему из нескольких агентов, которая возьмёт на себя сложную аналитику и поддержку клиентов. Старт курса 🚀

👨‍💻 Рабочее место админа пепси-кодера 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #garbage_collector
👨‍💻 Рабочее место админа пепси-кодера 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #garbage_collector

👥 Дайджест 2025 Год завершается, самое время подвести итоги. 2025 принёс нам .NET 10 — юбилейный LTS-релиз. ↪️ .NET 10 Релиз
👥 Дайджест 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

🌐 Перенаправляем запросы в 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

🛍 Microsoft Store из терминала Windows 11 получила встроенный CLI для Microsoft Store. Команда store ищет, устанавливает и о
🛍 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

🔗 Цепочка конструкторов в 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

😑 Что выведет код Делегаты в шарпах — штука базовая, но в деталях легко запутаться. Посмотрите на код и предскажите вывод, п
😑 Что выведет код Делегаты в шарпах — штука базовая, но в деталях легко запутаться. Посмотрите на код и предскажите вывод, прежде чем проверять. ➡️ Для любознательных ответ в нашем канале с задачами 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #dotnet_challenge

Интерполяция строк не бесплатна Строки в горячих участках вашего кода бьют по памяти сильнее чем кажется. В ASP.NET они часто оказываются в топе аллокаторов в профайлере. Что создаёт лишние строки • Интерполяция var key = $"{userId}:{tenantId. Каждый вызов порождает новый string и новый массив char. • string.Format string.Format("{0}-{1}", a, b); работает по той же схеме создаёт новый объект и буфер под символы. • Частые ToString() request.Headers["X-Id"].ToString(); при каждом запросе снова строит строку из заголовка. Как сделать безопаснее • Использовать структурированное логирование
logger.LogInformation("User {UserId} logged in", userId);
В этом случае ILogger не формирует строку когда соответствующий уровень логов отключён, а значения попадают в структурированные поля записи. • Не вызывать ToString() без необходимости Формируйте строку только там где она действительно нужна в ответе или в редком логировании, а не в общем горячем пути. • В особо чувствительных местах использовать Span и ValueStringBuilder Они позволяют собирать текст в переиспользуемом буфере и заметно снизить количество мусора. Если код выполняется на каждом запросе, строковая интерполяция и лишние преобразования в string перестают быть дешёвым сахаром и становятся реальным источником аллокаций. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #il_люминатор

🛠 ToonEncoder для .NET ToonEncoder — это библиотека, которая кодирует данные в TOON. TOON описывается как компактное человек
🛠 ToonEncoder для .NET ToonEncoder — это библиотека, которая кодирует данные в TOON. TOON описывается как компактное человекочитаемое представление той же модели данных что и JSON, но с упором на экономию токенов в промптах для LLM. Практический кейс для айтишников это подготовка данных для LLM, например список логов, результатов поиска, объектов из базы, или пачка тул коллов, где табличный вид дает меньше лишней пунктуации и меньше повторяющихся ключей. Пример:
using Cysharp.AI;

var users = new User[]
{
    new (1, "Alice", "admin"),
    new (2, "Bob", "user"),
};

string toon = ToonEncoder.Encode(users);
Console.WriteLine(toon);

string toon2 = ToonEncoder.EncodeAsTabularArray(users);
Console.WriteLine(toon2);

Console.WriteLine(toon == toon2); // same result

public record User(int Id, string Name, string Role);
У TOON есть режимы с разными разделителями, включая таб и пайп, чтобы еще чуть подкрутить токенизацию под конкретный ввод. ➡️ Репозиторий 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view