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

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

Відкрити в Telegram

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

Показати більше

📈 Аналітичний огляд Telegram-каналу Библиотека шарписта | C#, F#, .NET, ASP.NET

Канал Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 21 705 підписників, посідаючи 5 953 місце в категорії Технології та додатки та 30 278 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 21 705 підписників.

За останніми даними від 28 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -37, а за останні 24 години на 5, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 16.02%. Протягом перших 24 годин після публікації контент зазвичай збирає 7.85% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 3 478 переглядів. Протягом першої доби публікація в середньому набирає 1 705 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 26.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як .net, шарписта, навигация, await, string.

📝 Опис та контентна політика

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

Завдяки високій частоті оновлень (останні дані отримано 29 серпня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

21 705
Підписники
+524 години
-57 днів
-3730 день
Архів дописів
WANTED: .NET-РЕЦЕДИВИСТ Разыскивается эксперт, способный приручить C# и заставить его работать идеально. Мы знаем, что у тебя
WANTED: .NET-РЕЦЕДИВИСТ Разыскивается эксперт, способный приручить C# и заставить его работать идеально. Мы знаем, что у тебя есть секретные приёмы, которыми пора поделиться с комьюнити. Приметы: — глубоко знает экосистему .NET и может сравнить её с Java или Go; — умеет проектировать сложные системы без «костылей»; — готов выступать на большую аудиторию в качестве автора или ментора; — хочет монетизировать свой профессиональный опыт. Что в контракте: — гонорар за интеллектуальный вклад; — статус официального эксперта Proglib Academy; — заметный буст личного бренда. Признаться во всём здесь P.S. Знаешь сильного «шарписта»? Сдай его следствию — перешли пост.

⚙️ Yield в упрощает итерацию Yield позволяет создавать итераторы, возвращая элементы коллекции по одному, без загрузки всего в память сразу. Как работает yield return При yield return код возвращает значение и сохраняет состояние для следующей итерации в foreach или LINQ. Компилятор генерирует класс, реализующий IEnumerable<T>, с MoveNext() для продолжения. Пример простого генератора четных чисел:
IEnumerable<int> EvenNumbers(int max) {
    for (int i = 0; i <= max; i += 2) {
        yield return i;
    }
}
foreach по нему выдаст 0, 2, 4... лениво, только при запросе. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

⚙️ Yield в упрощает итерацию Yield позволяет создавать итераторы, возвращая элементы коллекции по одному, без загрузки всего в память сразу. Метод с yield превращается в state machine, которая приостанавливает выполнение до следующего вызова. Как работает yield return При yield return код возвращает значение и сохраняет состояние для следующей итерации в foreach или LINQ. Компилятор генерирует класс, реализующий IEnumerable<T>, с MoveNext() для продолжения.

😊 Потоковый ответ вместо буферизации Во многих API до сих пор пишут методы вида public IEnumerable GetOrders() и думают что
😊 Потоковый ответ вместо буферизации Во многих API до сих пор пишут методы вида public IEnumerable<OrderDto> GetOrders() и думают что это ленивый возврат данных. На деле фреймворк вынужден сначала полностью пройти по IEnumerable, собрать коллекцию, а уже потом целиком сериализовать ее в JSON и отправить в сеть. Большой список целиком оказывается в куче, всплеск аллокаций ускоряет сборку мусора, а клиент ждет первый байт до тех пор пока не будет готов весь массив данных. В современных версиях .NET намного безопаснее отдавать последовательность как IAsyncEnumerable<T>. В этом случае ASP.NET может сериализовать элементы по мере их появления и выводить их в ответ потоком вместо полной буферизации результата. Альтернативный вариант — явно использовать Results.Stream и JsonSerializer.SerializeAsync(stream, data) чтобы отдать JSON как поток байтов и держать в памяти лишь небольшой кусок данных. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #il_люминатор

🎅 Секретный Санта для айтишников от Proglib.academy Весь этот год команда Академии запускала курсы для айтишников. А под Нов
🎅 Секретный Санта для айтишников от Proglib.academy Весь этот год команда Академии запускала курсы для айтишников. А под Новый год мы запускаем новый курс по ИИ-агентам и ставим под ёлку самый свежий стек 2025 года и обучение проектированию автономных нейросетевых экосистем — от LLM и ReAct-циклов до мультиагентных систем, LangGraph, AutoGen и продакшн-практик. 🎁 Хотим дарить подарки и приглашаем вас поучаствовать в конкурсе: 1️⃣ Упомяните курс Академии у себя в блоге. 2️⃣ Пришлите скрин сюда. 3️⃣ Получите секретный промокод на 10 000 ₽ при оплате любого курса. Подходит всё — соцсети, блоги, Telegram-каналы от 300 подписчиков и более. 🎄 Акция действует до Нового года. Win-win, всё как мы любим!

🥹🥹 Можно заказать на амазоне 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #garbage_collector
🥹🥹 Можно заказать на амазоне 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #garbage_collector

🎚 Подборка вакансий для шарпистов Backend-разработчик C# на удалёнку. .NET Developer (Middle) — удалёнка или офис в СПб. Senior Backend-разработчик от 365 000 ₽ ➡️ Еще больше топовых вакансий — в нашем канале C# Jobs 🐸 Библиотека шарписта

⚙️ Поиск дубликатов с LINQ Когда коллекция растет, руками гонять двойные циклы для поиска дубликатов уже не хочется. В .NET это хорошо решается комбинацией LINQ и HashSet, плюс классическими GroupBy и Distinct. LINQ Any и HashSet Идея простая: HashSet хранит только уникальные элементы. Метод Add возвращает false если такое значение уже было. Значит можно пробежать коллекцию через Any и остановиться на первом дубликате:
public static bool HasDuplicatesAny<T>(IEnumerable<T> source)
{
    HashSet<T> seen = new();

    return source.Any(item => !seen.Add(item));
}
Метод возвращает true как только встретится элемент который не удалось добавить в набор. LINQ GroupBy и Count 1 Если нужны сами дубликаты, а не только факт их наличия, помогает GroupBy. Мы группируем по значению и фильтруем группы в которых больше одного элемента:
public static IEnumerable<T> GetDuplicatesGroupBy<T>(IEnumerable<T> source)
{
    return source
        .GroupBy(x => x)
        .Where(g => g.Count() > 1)
        .Select(g => g.Key);
}
LINQ Distinct и подсчет элементов Иногда достаточно проверить есть ли дубликаты, не вытаскивая их. Тогда можно сравнить размер исходной коллекции и количества уникальных элементов после Distinct:
public static bool HasDuplicatesDistinct<T>(IEnumerable<T> source)
{
    int total = source.Count();
    int unique = source.Distinct().Count();

    return unique != total;
}
Для быстрых проверок чаще всего хватает Any + HashSet. GroupBy удобно когда нужны сами дубликаты. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

🛠 RoomSharp 0.4.3: миграции для продакшена RoomSharp смешивает декларативные [AutoMigration] и императивные классы миграций.
🛠 RoomSharp 0.4.3: миграции для продакшена RoomSharp смешивает декларативные [AutoMigration] и императивные классы миграций. Автоматически обрабатывает переименования таблиц, колонок, добавление/удаление полей. MigrationManager следит за версиями в __room_metadata, предупреждает о деструктивных изменениях и запускает колбэки. Установка — dotnet add package RoomSharp плюс провайдеры вроде RoomSharp.SqlServer. Расширения RoomSharp.Extensions для конфига. 📎 В блоге разработчиков много полезной информации 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #async_news

AI-агенты в продакшн: промышленный стандарт архитектуры В Enterprise-разработке на первый план выходит контроль и предсказуемость. Мы учим проектировать ИИ-агентов как надёжные системы со строгой логикой и мониторингом. Ключевые модули:управление состоянием в LangGraph для проектирования сложных стейт-машин; — архитектура `RAG` на базе Pinecone или Chroma для обоснованной генерации ответов; — промышленная автоматизация через n8n для интеграции логики в бизнес-процессы; — безопасность и observability с внедрением LangSmith и Guardrails для аудита системы. Результат — масштабируемая система, готовая к интеграции в ваш стек. Подробности курса

🗂 Работа и пет-проекты с одного ПК Работаете днём в корпоративном репо, вечером в личном на GitHub. Один ПК, но email и ключ
🗂 Работа и пет-проекты с одного ПК Работаете днём в корпоративном репо, вечером в личном на GitHub. Один ПК, но email и ключи подписи разные. Ручная смена настроек Git каждый раз бесит и приводит к косякам с коммитами. Условные includeIf решают всё Добавьте в ~/.gitconfig пару строк. Git сам подхватит нужный конфиг по пути к папке или remote URL. Для рабочих папок загрузит корпоративный email:
[includeIf "gitdir:~/work/"] path = .gitconfig-corp
Личные репозитории получат ваш домашний email автоматически:
[includeIf "hasconfig:remote..url:https://github.com/вашеимя/"] path = .gitconfig-personal
Забудьте про git config --global user.email каждый раз. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

🤨 Lazy<T> против всех синглтонов Lazy<T> в C# стал де-факто стандартом для thread-safe ленивой инициализации. Забудьте lock, volatile и двойные проверки. Проблемы классического синглтона:
public sealed class ClassicSingleton
{
    private static ClassicSingleton _instance;
    private static readonly object _lock = new object();
    
    private ClassicSingleton()
    {
        // 2 секунды на реальную БД/файлы
        Thread.Sleep(2000);
        Console.WriteLine("ClassicSingleton создан");
    }
    
    public static ClassicSingleton Instance
    {
        get
        {
            if (_instance == null)
            {
                lock (_lock)
                {
                    _instance ??= new ClassicSingleton();
                }
            }
            return _instance;
        }
    }
}
Lazy<T> решает всё элегантно:
public sealed class LazySingleton
{
    private static readonly Lazy<LazySingleton> _lazy = new Lazy<LazySingleton>(() =>
    {
        Console.WriteLine("LazySingleton создан (ТОЛЬКО РАЗ)");
        Thread.Sleep(2000); // Имитация тяжёлой работы
        return new LazySingleton();
    });
    
    private LazySingleton() { }
    
    public static LazySingleton Instance => _lazy.Value;
    public static bool IsInitialized => _lazy.IsValueCreated;
}
Реальный многопоточный тест:
static async Task TestPerformance()
{
    var stopwatch = Stopwatch.StartNew();
    
    var tasks = Enumerable.Range(0, 1000)
        .Select(i => Task.Run(() =>
        {
            var instance = LazySingleton.Instance;
            return instance.GetHashCode();
        }))
        .ToArray();
    
    var results = await Task.WhenAll(tasks);
    
    stopwatch.Stop();
    Console.WriteLine($"1000 потоков: {stopwatch.ElapsedMilliseconds}ms");
    Console.WriteLine($"Уникальных объектов: {results.Distinct().Count()}");
    Console.WriteLine($"Инициализировано: {LazySingleton.IsInitialized}");
}
Lazy<T> — это не хак, а официальный стандарт Microsoft. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #il_люминатор

🧠 When и Unless для умных проверок В FluentValidation условная валидация запускает правила только при нужных условиях. When и Unless экономят циклы и делают валидаторы читаемыми. • When = «проверить, если условие верно» • Unless = «проверить, если условие НЕ верно» Пример:
RuleFor(x => x.ShippingAddress)
    .NotEmpty()
    .When(x => x.DeliveryMethod == "Express");

RuleFor(x => x.CreditCard)
    .NotEmpty()
    .Unless(x => x.PaymentMethod == "PayPal");
When проверяет условие перед правилом. Express доставка требует адрес, PayPal не требует карту. Логика в одном месте без if-else в контроллере. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

AI-агенты в Enterprise: взгляд .NET разработчика Пока стартапы играются с Python-скриптами, энтерпрайз требует архитектуры. М
AI-агенты в Enterprise: взгляд .NET разработчика Пока стартапы играются с Python-скриптами, энтерпрайз требует архитектуры. Мультиагентные системы в 2026 году — это, по сути, новые микросервисы. В обновленном курсе по AI-агентам мы сместили фокус с простого «кодинга» на системное проектирование и архитектуру. Что важного для архитектора:Оркестрация: Разбор LangGraph (графы состояний) и AutoGen. — RAG & Vector DBs: Интеграция с Pinecone/Weaviate (актуально для корпоративных баз знаний). — Инфраструктура: Deployment, GPU-кластеры и AgentOps (мониторинг). — Курс разделен на треки. Если не хотите писать на Python, выбирайте Overview — поймете принципы построения систем, протоколы MCP и A2A коммуникацию. ⚡️ Offer 3-in-1: Покупаете курс по агентам — забираете два любых других бесплатно. Отличный шанс взять «Алгоритмы» или «Паттерны». Изучить программу

💃 Волшебство для больших проектов Partial классы — это C#-хакинг, который разбивает один класс на несколько файлов, не ломая компиляцию. Идеально для автогенерации, командной работы и масштабирования монстров-кода. Представьте: WinForms или WPF дизайнер генерирует кучу кода в .Designer.cs, а вы хотите добавить свою логику. Без partial пришлось бы вручную мержить изменения или наследоваться с кучей override. Partial решает это элегантно — основной класс в вашем файле, автокод в отдельном. Все части класса должны иметь одинаковые модификаторы доступа и использовать ключевое слово partial. Компилятор проверит согласованность. Живой пример:
// Employee.Core.cs — базовая структура
public partial class Employee
{
    public string Name { get; set; }
    public decimal Salary { get; set; }
    
    public partial void ValidateName();
    public partial void ValidateSalary();
    
    public void Hire()
    {
        ValidateName();
        ValidateSalary();
        Console.WriteLine($"{Name} нанят с зарплатой {Salary:C}!");
    }
}

// Employee.Validation.cs — бизнес-правила
public partial class Employee
{
    public partial void ValidateName()
    {
        if (string.IsNullOrWhiteSpace(Name) || Name.Length < 2)
            throw new ArgumentException("Имя должно быть не короче 2 символов!");
    }
    
    public partial void ValidateSalary()
    {
        if (Salary < 50000) throw new ArgumentException("Зарплата не может быть ниже 50k!");
    }
}

// Employee.Extensions.cs — расширения (опционально)
public partial class Employee
{
    public void Promote() => Salary *= 1.2m;
}
Partial методы уникальны: если реализация отсутствует, метод полностью удаляется из IL. Идеально для опциональных хуков в генерируемом коде. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

🧑‍🎓 Диплом = 15% к зарплате Диплом в IT вещь нестабильная. Одним подавай три профильных, чтобы устроиться, другие косо взгл
+5
🧑‍🎓 Диплом = 15% к зарплате Диплом в IT вещь нестабильная. Одним подавай три профильных, чтобы устроиться, другие косо взглянут на любой диплом, который не из МФТИ. В карточках собрали факты про эту корочку. Листайте и проверяйте сколько вам можно накинуть за диплом. ➡️ Полный материал 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта

🎓 Твой опыт стоит дорого — стань экспертом Proglib Academy Чувствуешь, что накопил достаточно знаний, чтобы делиться ими с д
🎓 Твой опыт стоит дорого — стань экспертом Proglib Academy Чувствуешь, что накопил достаточно знаний, чтобы делиться ими с другими? Мы ищем сильных практиков, которые хотят попробовать себя в роли: — преподавателей; — авторов курсов; — наставников. Это возможность не только монетизировать экспертизу, но и прокачать личный бренд, структурировать собственные знания и вырастить новое поколение специалистов. 👉 Заполни короткую анкету

✏️ Вопрос с собеса Админ принёс актуальный вопрос, который ему задали вчера на собеседовании. Чем отличаются IQueryable<T> и IEnumerable<T> помимо синтаксиса? Можете оставить свой ответ в комментариях и сравнить его с нашим. 👉 Посмотреть ответ в нашем канале с задачами 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #dotnet_challenge

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