Библиотека шарписта | C#, F#, .NET, ASP.NET
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Show more📈 Analytical overview of Telegram channel Библиотека шарписта | C#, F#, .NET, ASP.NET
Channel Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) in the Russian language segment is an active participant. Currently, the community unites 21 707 subscribers, ranking 5 962 in the Technologies & Applications category and 30 301 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 21 707 subscribers.
According to the latest data from 27 August, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -42 over the last 30 days and by 3 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 15.91%. Within the first 24 hours after publication, content typically collects 7.92% reactions from the total number of subscribers.
- Post reach: On average, each post receives 3 454 views. Within the first day, a publication typically gains 1 718 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 26.
- Thematic interests: Content is focused on key topics such as .net, шарписта, навигация, await, string.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @proglib_adv
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead”
Thanks to the high frequency of updates (latest data received on 28 August, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
#if друг в друга. Чем больше веток — тем глубже вложенность и тяжелее читать код.
Теперь F# поддерживает #elif, и цепочки условий пишутся плоско:
#if WIN64 let path = "/library/x64/runtime.dll" #elif WIN86 let path = "/library/x86/runtime.dll" #elif MAC let path = "/library/iOS/runtime-osx.dll" #else let path = "/library/unix/runtime.dll" #endifВ условиях работают &&, || и !, цепочки можно строить произвольной длины, вложенность тоже поддерживается. Функция входит в F# 11. Чтобы включить, нужно указать
--langversion:11.0.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_viewfor (int i = 0; i < 100_000; i++)
{
queue.Enqueue(() => Process(i));
}
Здесь каждая итерация создаёт новый объект делегата и захватывает переменную i в замыкание. То есть рантайм выделяет память дважды на каждый шаг цикла.
Сборщик мусора рано или поздно всё почистит, но частые мелкие аллокации создают давление на GC. Это выражается в микропаузах, просадках по latency и лишней работе, которую рантайм мог бы не делать.
Если делегат логически одинаков от вызова к вызову, то кешируйте его один раз:
private static readonly Action<Job> s_process = static job => Process(job);
static в лямбде явно запрещает захват внешних переменных. Если компилятор видит, что захват всё же происходит, он выдаст ошибку. Это хорошая защита от случайных замыканий.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_viewLangGraph, CrewAI и MCP;
— настраиваем кэширование и роутинг, чтобы бот не сожрал токены;
— разбираемся со стейтом, учимся дебажить через time-travel и прикручиваем human-in-the-loop;
— выводим RAG в прод так, чтобы безопасники не завернули архитектуру из-за 152-ФЗ.
В пекло скучные лекции про общую инфраструктуру — сразу фокусируемся на агентных фреймворках и написании кода. Занятия ведут бывалые лиды из Газпромбанка и Альфы, набившие шишки на реальных задачах.
Кстати, на днях мы пилили агента в прямом эфире, если пропустили — есть запись вебинара.Сегодня последний день, когда можно забрать курс по старым ценам. Базовый тариф сейчас стоит 49 000 ₽ (вместо 62 990 ₽), продвинутый трек — 99 000 ₽ (вместо 124 990 ₽). Если не хочется отдавать всю сумму сразу, есть рассрочка. Торопитесь — на потоке осталось всего 5 мест! → Зафиксировать цену и перейти к сборке своих агентов
--langversion:preview в параметры компилятора.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_viewmodernize-dotnet для GitHub Copilot. Раньше автоматизированная миграция .NET работала только внутри Visual Studio. Теперь тот же процесс доступен в VS Code, терминале через Copilot CLI и прямо на GitHub.
Агент работает по модели оценка → план → выполнение. На выходе — три артефакта прямо в репозитории: отчёт о текущем состоянии кода, план апгрейда с последовательностью шагов и набор задач с конкретными изменениями.
Как запустить в терминале:
/plugin marketplace add dotnet/modernize-dotnet /plugin install modernize-dotnet@modernize-dotnet-plugins /agent # выбрать modernize-dotnet # затем: upgrade my solution to a new version of .NETПоддерживаемые типы проектов: ASP.NET Core, Blazor, Azure Functions, WPF, консольные приложения и библиотеки. Миграция с .NET Framework тоже поддерживается — но только на Windows. ➡️ Блог разработчиков 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #async_news
public interface IA { int M(); }
public interface IB : IA {
new int M();
int IA.M() => this.M() + 100; // DIM покрывает слот IA.M
}
Раньше F# требовал реализовать и IA, и IB. Теперь достаточно IB:
type C() =
interface IB with member _.M() = 42
(C() :> IB).M() // 42
(C() :> IA).M() // 142 — DIM перенаправляет: this.M() + 100
Улучшение работает не только для простых случаев. Поддерживается ромбовидное наследование, дженерик-интерфейсы, свойства, события, структуры и объектные выражения.
Для включения нужен флаг --langversion:preview.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_viewTarFile.CreateFromDirectory всегда создавал архивы в формате Pax. Без вариантов. Если нужен был GNU или Ustar — приходилось обходными путями.
Теперь у метода появятся новые перегрузки с параметром TarEntryFormat. Поддерживаются все четыре формата: Pax, Ustar, GNU и V7.
// GNU — для совместимости с Linux-окружениями
TarFile.CreateFromDirectory("/source/dir", "/dest/archive.tar",
includeBaseDirectory: true, TarEntryFormat.Gnu);
// Ustar — широкая совместимость с разными инструментами
TarFile.CreateFromDirectory("/source/dir", outputStream,
includeBaseDirectory: false, TarEntryFormat.Ustar);
// Асинхронный вариант тоже есть
await TarFile.CreateFromDirectoryAsync("/source/dir", "/dest/archive.tar",
includeBaseDirectory: true, TarEntryFormat.Pax, cancellationToken);
Формат имеет значение, когда архив передаётся в конкретный инструмент или среду со своими ожиданиями. GNU лучше воспринимается стандартным tar в Linux.
Ustar даёт максимальную совместимость там, где важна переносимость. V7 нужен в совсем редких легаси-сценариях.
Раньше под такие случаи приходилось либо писать обёртки вручную, либо тянуть сторонние библиотеки. Теперь это часть стандартного API.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_viewЧто делает оператор using в C#Почти каждый C#-разработчик писал такой код сотни раз:
using (var connection = new SqlConnection(connectionString))
{
// работаем с ресурсом
}
На первый взгляд — просто синтаксический сахар.
Подсказка: попробуйте мысленно развернуть этот блок в эквивалентный try/finally.
➡️ Проверить себя
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#dotnet_challengeLangGraph, AutoGen, MCP и CrewAI;
— настройка продвинутого RAG для парсинга документов и точного поиска;
— внедрение решений с учётом действующего законодательства (152-ФЗ);
— дипломная работа, за основу которой можно взять свой рабочий проект или задачу, которую предложим мы.
Эксперты поделятся инсайтами из реального продакшна — тем, о чём вам никогда не расскажет ни одна нейросеть.
Запись первого открытого вебинара, на котором мы вместе с руководителем AI-направления в Альфа-Банке Полиной Полуниной пилили агента в прямом эфире.Ах да, чуть не забыли! Дарим промокод AGENTSWEB на скидку 10 000 рублей и два курса сверху при покупке до 15 марта 🎁 → Освоить разработку AI-агентов
public class DbContextMigrationsHealthCheck(DbContext dbContext) : IHealthCheck
{
public async Task<HealthCheckResult> CheckHealthAsync(
HealthCheckContext context,
CancellationToken cancellationToken = default)
{
try
{
var applied = await dbContext.Database
.GetAppliedMigrationsAsync(cancellationToken: cancellationToken);
var pending = await dbContext.Database
.GetPendingMigrationsAsync(cancellationToken);
if (pending.Any())
{
return HealthCheckResult.Degraded(
"Есть неприменённые миграции.",
data: new Dictionary<string, object>
{
{ "PendingMigrations", pending },
{ "LatestAppliedMigration", applied.LastOrDefault() ?? "" }
});
}
return HealthCheckResult.Healthy(
data: new Dictionary<string, object>
{
{ "LatestAppliedMigration", applied.LastOrDefault() ?? "" }
});
}
catch (Exception ex)
{
return new HealthCheckResult(context.Registration.FailureStatus, exception: ex);
}
}
}
Идея не ограничивается EF Core. Любая зависимость, которая доступна, но ещё не готова к работе:
• CMS — нужно прогреть кэш перед началом работы
• Биллинг — зависит от загрузки актуальных правил ценообразования
• Search API — ждёт готовности текущей версии индекса
Сервис здоров не тогда, когда открывает SQL-коннекшн. Сервис здоров, когда готов выполнять ту работу, для которой задеплоен.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#il_люминаторJsonSerializerOptions — GetTypeInfo<T>() и TryGetTypeInfo<T>(). Раньше, чтобы получить JsonTypeInfo<T>, приходилось вручную кастовать результат из не-дженерикового GetTypeInfo(Type).
// Раньше
JsonTypeInfo<MyType> info = (JsonTypeInfo<MyType>)options.GetTypeInfo(typeof(MyType));
// Теперь
JsonTypeInfo<MyType> info = options.GetTypeInfo<MyType>();
Если тип может быть не зарегистрирован — есть вариант с TryGetTypeInfo<T>(), который не бросает исключение, а возвращает bool.
if (options.TryGetTypeInfo<MyType>(out JsonTypeInfo<MyType>? typeInfo))
{
// typeInfo готов к работе
}
Изменение небольшое, но устраняет одну из тех мелких раздражающих вещей, с которыми сталкиваешься в реальных проектах.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view