Библиотека шарписта | C#, F#, .NET, ASP.NET
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @tproger_sales_bot Для обратной связи: @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 565 suscriptores, ocupando la posición 6 133 en la categoría Tecnologías y Aplicaciones y el puesto 30 418 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 565 suscriptores.
Según los últimos datos del 25 octubre, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -106, y en las últimas 24 horas de -7, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 13.86%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.24% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 2 989 visualizaciones. En el primer día suele acumular 1 562 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 4.
- 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
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 26 octubre, 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.
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Что реально хочется разобрать? Где чаще всего застреваете? Что пробовали, но так и не получилось нормально внедрить?🤩 Пишите вопросы в комментариях — самые залайканные разберём на вебинаре в первую очередь. Задавайте всё, что давно хотелось спросить 📍 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта
→ C# 15 стал default для .NET 11 — union types и closed hierarchies больше не preview; → runtime получил новые возможности для диагностики и оптимизации, включая crash reporting на Unix и аппаратное ускорение System.Half; → обновились SDK, MSBuild, NuGet, ASP.NET Core, MAUI и WinForms.🌞 Финальный .NET 11 запланирован на 10 ноября и будет STS-релизом. А 10 ноября заканчивается поддержка .NET 8 и .NET 9. Для них уже вышли сентябрьские security updates: 8.0.31, 9.0.20 и 10.0.12. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #async_news
int Double(int x) => x * 2; var result = Double(21);Но JIT может решить, что отдельный вызов здесь вообще не нужен. При inlining тело метода встраивается непосредственно в вызывающий код: 🔴 До:
call Double ↓ x * 2🔴 После:
21 * 2Зачем? Меньше накладных расходов на вызов метода, а главное — JIT получает больше кода для последующих оптимизаций. Но inline не означает «метод маленький → обязательно встроить». JIT учитывает размер метода, частоту вызовов, доступность кода для анализа и другие эвристики. Поэтому даже небольшой метод может не попасть в inline. 📍 А атрибут:
[MethodImpl(MethodImplOptions.AggressiveInlining)]— это подсказка JIT, а не приказ. И наоборот, иногда большой метод всё-таки может быть встроен, если JIT считает это выгодным. Вот почему производительность C# нельзя оценивать только по исходному коду: между C# и CPU есть ещё один слой — JIT и его оптимизатор. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #il_люминатор
<PublishAot>true</PublishAot>
В итоге можно прогнать тесты в тех же AOT-условиях, в которых будет работать приложение.
Особенно полезно для проектов, где Native AOT — часть production-сборки.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#async_news
var users = new Dictionary<int, string>
{
[1] = "Ada",
[2] = "Linus",
[3] = "Grace"
};
var frozenUsers = users.ToFrozenDictionary();
После создания frozenUsers нельзя изменить. Зато структура оптимизируется именно под быстрый поиск.
🟡 Хороший сценарий — конфигурация, справочники, таблицы маршрутизации или наборы разрешений, которые загружаются один раз и затем используются тысячи раз.
FrozenDictionary не означает «быстрее любого Dictionary». Создание такой коллекции дороже, поэтому выигрыш появляется именно там, где чтений много, а изменений нет.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view
string s = "😊";
Console.WriteLine(s.Length); // 2, не 1
Length считает не символы, а UTF-16 кодовые единицы. Эмодзи и многие Unicode-символы занимают две единицы — суррогатную пару.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_viewConsole.WriteLine(nameof(List<>)); // Выведет "List"
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view[includeIf "gitdir:~/work/"] path = .gitconfig-corpЛичные репозитории получат ваш домашний email автоматически:
[includeIf "hasconfig:remote.*.url:https://github.com/вашеимя/**"] path = .gitconfig-personalЗабудьте про git config --global user.email каждый раз. 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #sharp_view
— Flex работает с .NET 8, 9 и 10 в isolated-модели; — функции масштабируются независимо друг от друга; — можно настраивать память инстанса; — появилась интеграция с VNet; — есть Always Ready-инстансы для снижения cold start; — деплой идёт через blob storage, а не старый zip-deploy.📍 Переключить существующий Linux Consumption App на Flex «на месте» нельзя. Нужно создать новое Function App в Flex, перенести конфигурацию и задеплоить код. Для миграции Microsoft уже предлагает отдельный CLI:
az functionapp flex-migration start
Он создаёт Flex-приложение на основе существующего Linux Consumption App.
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#async_news
bool found = false;
foreach (var warehouse in warehouses)
{
foreach (var bin in warehouse.Bins)
{
if (bin.Sku == requestedSku)
{
found = true;
break;
}
}
if (found)
break;
}
🤩 В C# 15 можно обозначить внешний цикл и выйти из него напрямую:
scan: foreach (var warehouse in warehouses)
{
foreach (var bin in warehouse.Bins)
{
if (bin.Sku == requestedSku)
break scan;
}
}
Никаких found, дополнительного if и лишнего состояния.
C# 15 сейчас доступен в .NET 11 Preview 7.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view
<maps:Map IsClusteringEnabled="True" />
Ближайшие метки автоматически группируются в кластер с числом внутри. При увеличении масштаба кластер раскрывается до отдельных пинов.
🤩 Разные группы кластеров
Если нужно, чтобы кофейни кластеризовались отдельно от парков, используем ClusteringIdentifier на Pin:
map.Pins.Add(new Pin
{
Label = "Pike Place Coffee",
Location = new Location(47.6097, -122.3331),
ClusteringIdentifier = "coffee"
});
map.Pins.Add(new Pin
{
Label = "Occidental Square",
Location = new Location(47.6064, -122.3325),
ClusteringIdentifier = "parks"
});
Пины с одинаковым идентификатором группируются вместе. С разными — образуют независимые кластеры, даже если географически рядом. Пины без идентификатора попадают в общую группу по умолчанию.
🤩 Обработка нажатия на кластер
При тапе на кластер срабатывает событие ClusterClicked:
map.ClusterClicked += async (sender, e) =>
{
string names = string.Join("\n", e.Pins.Select(p => p.Label));
await DisplayAlert(
$"Кластер ({e.Pins.Count} меток)",
names,
"OK");
// Отменить стандартное приближение к кластеру:
// e.Handled = true;
};
🤩 В ClusterClickedEventArgs три поля:
• Pins — список пинов в кластере • Location — географический центр • Handled — если true, стандартное поведение (зум к кластеру) отменяется.🤩 Платформенные детали На Android кластеризация работает через собственный алгоритм на основе сетки, пересчитывается при смене масштаба. Сторонние зависимости не нужны. На iOS и Mac Catalyst используется нативный MKClusterAnnotation из MapKit — анимации и поведение платформенные. Пример с кластеризацией уже есть в репозитории, страница Clustering в проекте MapDemo. ➡️ Блог разработчиков 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #il_люминатор
dotnet add package Microsoft.Agents.AI.Foundry.Hosting --prerelease
🤩 И три строки:
var builder = AgentHost.CreateBuilder(args);
builder.Services.AddFoundryResponses(agent);
builder.RegisterProtocol(
"responses",
endpoints => endpoints.MapFoundryResponses());
🤩 Дальше:
azd provision azd deployFoundry берёт на себя инфраструктуру, масштабирование, состояние сессий, identity, endpoint и observability. При этом сам AIAgent практически не меняется — вы просто добавляете вокруг него hosting-слой. 🔗 Источник: From dotnet run to Foundry Hosted Agent in 3 lines of C# 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #async_news
optionsBuilder
.UseSeeding((context, _) =>
{
if (!context.Set<Role>().Any())
{
context.Set<Role>().AddRange(
new Role { Name = "Admin" },
new Role { Name = "User" });
context.SaveChanges();
}
});
Плюс в том, что seed выполняется вместе с Migrate и dotnet ef database update, а EF защищает его механизмом блокировки миграций.
🤩 А HasData теперь лучше использовать для статических и детерминированных данных — например, фиксированного справочника. Для данных, зависящих от состояния БД, внешних API или требующих вычислений, Microsoft рекомендует UseSeeding.
Если используете async-вариант, реализуйте и UseSeeding, и UseAsyncSeeding — EF tooling пока опирается на синхронный метод.
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view