В обыденной работе с объектами часто приходится проверять, не равен ли объект null, прежде чем присваивать значение его свойствам. Это приводит к громоздким конструкциям с множеством if. Теперь с null-условным присваиванием можно написать проще и понятнее.
Операторы условного доступа
?. и ?[] теперь поддерживают использование слева от оператора присваивания. Раньше для безопасного присваивания требовалось писать так:if (customer is not null)
{
customer.Order = GetCurrentOrder();
}
С null-условным присваиванием можно упростить до одной строки:
customer?.Order = GetCurrentOrder();
Особенность в том, что правая часть вычисляется только если левая часть не равна null. Если customer равен null, метод
GetCurrentOrder() вызван не будет. Это оптимизирует производительность и упрощает логику.Также это работает с составными операторами присваивания: +=, -=, *=, но не поддерживается для инкремента и декремента.
customer?.Total += 100;
// Но нельзя так:
// customer?.Total++;
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🥱5
🧑💻 Проекция колонок вместо сущностей в запросах
Когда работаете с базой данных, лучше получить только нужные поля, а не всю сущность. Это ускорит запросы и снизит объём передаваемых данных.
Пример проекции колонок с использованием LINQ:
Здесь из таблицы пользователей выбираются только Id и Name, которые помещаются в объект UserDto.
🔹 ML для старта в Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека шарписта
#il_люминатор
Когда работаете с базой данных, лучше получить только нужные поля, а не всю сущность. Это ускорит запросы и снизит объём передаваемых данных.
Пример проекции колонок с использованием LINQ:
var dto = await db.Users
.Where(u => u.Id == id)
.Select(u => new UserDto(u.Id, u.Name))
.SingleOrDefaultAsync(ct);
Здесь из таблицы пользователей выбираются только Id и Name, которые помещаются в объект UserDto.
🔹 ML для старта в Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰2
🔑 Управление HttpClient по ключам
С .NET 9 можно управлять зависимостями по ключам. Буквально регистрировать и получать, к примеру, конфиги для HttpClient.
Как это работает
•
• Внедрение осуществляется с помощью атрибута
• В отличие от старых подходов с именованными или типизированными клиентами, внедрение зависимостей по ключам позволяет упростить код и уменьшить лишние вызовы фабрики
Пример регистрации и использования:
Преимущества Keyed DI
• Минимизирует необходимость вручную создавать и хранить экземпляры через
• Позволяет внедрять в сервисы и контроллеры правильно настроенные клиенты с простым указанием ключа.
• Улучшает читаемость и поддержку кода, особенно если в проекте много разных конфигураций HttpClient.
• Можно глобально включить ключевой DI для всех клиентов через
Важные моменты
• По умолчанию
• Нужно внимательно следить за временем жизни сервисов, чтобы избежать утечек памяти и проблем с соединениями.
• При ошибочном использовании ключа сервис выдаст стандартное исключение, помогая быстро находить и исправлять конфигурационные ошибки.
🔹 ML для старта в Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека шарписта
#il_люминатор
С .NET 9 можно управлять зависимостями по ключам. Буквально регистрировать и получать, к примеру, конфиги для HttpClient.
Как это работает
•
AddAsKeyed() — новый метод расширения для регистрации именованных HttpClient как Keyed Service в DI. Имя клиента становится ключом, по которому можно получать конкретный экземпляр.• Внедрение осуществляется с помощью атрибута
[FromKeyedServices("key")] или через Func<string, HttpClient> для динамического выбора клиента по ключу.• В отличие от старых подходов с именованными или типизированными клиентами, внедрение зависимостей по ключам позволяет упростить код и уменьшить лишние вызовы фабрики
IHttpClientFactory.Пример регистрации и использования:
var builder = WebApplication.CreateBuilder(args);
// Регистрация HttpClient с ключом "github"
builder.Services.AddHttpClient("github", c =>
{
c.BaseAddress = new Uri("https://api.github.com/");
c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
c.DefaultRequestHeaders.Add("User-Agent", "dotnet");
})
.AddAsKeyed();
var app = builder.Build();
// Внедрение HttpClient по ключу "github"
app.MapGet("/", ([FromKeyedServices("github")] HttpClient httpClient) =>
{
return httpClient.GetFromJsonAsync<Repo>("/repos/dotnet/runtime");
});
app.Run();
record Repo(string Name, string Url);
Преимущества Keyed DI
• Минимизирует необходимость вручную создавать и хранить экземпляры через
IHttpClientFactory.• Позволяет внедрять в сервисы и контроллеры правильно настроенные клиенты с простым указанием ключа.
• Улучшает читаемость и поддержку кода, особенно если в проекте много разных конфигураций HttpClient.
• Можно глобально включить ключевой DI для всех клиентов через
ConfigureHttpClientDefaults.Важные моменты
• По умолчанию
AddAsKeyed() регистрирует HttpClient с областью видимости Scoped, но можно настроить и другой жизненный цикл.• Нужно внимательно следить за временем жизни сервисов, чтобы избежать утечек памяти и проблем с соединениями.
• При ошибочном использовании ключа сервис выдаст стандартное исключение, помогая быстро находить и исправлять конфигурационные ошибки.
🔹 ML для старта в Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥9👍3