🔥15❤5👍4
Едва заметное смещение порядка запуска скриптов способно породить загадочные баги, поэтому раз и навсегда стоит приручить их хронометраж в своём проекте.
В этом посте:
• Ранний запуск кода убирает неожиданные задержки во время старта;
• Чёткий порядок шагов помогает быстро ловить мелкие баги;
• Грамотная инициализация ускоряет запуск и упрощает будущие правки.
Держи сценарии по порядку, и проект отблагодарит стабильностью, ясным поведением, лёгкой отладкой и быстрой разработкой.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍8❤4
Как проще проверять свойства объектов без нагромождения if?
Во вложенных моделях условия быстро превращаются в нечитаемые цепочки: проверяем
До
С этим то же самое выражается куда короче:
🔥 Такой стиль делает проверки по свойствам более декларативными: читаем условие как описание «требуемой формы» объекта, а не как техническую реализацию с кучей логических операторов
➡️ C# Ready | #совет
Во вложенных моделях условия быстро превращаются в нечитаемые цепочки: проверяем
null, диапазоны, флаги — всё в одной куче. В C# 8 появились property patterns, которые позволяют описывать форму объекта прямо в условии.До
property patterns приходилось писать так:if (point != null &&
point.X > 0 && point.X < 10 &&
point.Y >= 5)
{
Console.WriteLine("Точка в зоне интереса");
}
С этим то же самое выражается куда короче:
if (point is { X: > 0 and < 10, Y: >= 5 })
{
Console.WriteLine("Точка в зоне интереса");
}Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍11🔥5
В этой шпаргалке вы познакомитесь с базовыми операторами LINQ для фильтрации, проекции и сортировки коллекций: от выбора элементов по условию и преобразования их в нужный формат до упорядочивания по разным ключам и «расплющивания» вложенных последовательностей.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31🤝13👍8❤3
Экономьте аллокации с ValueTask!
Частые асинхронные вызовы с
Объявляем обычный метод, возвращающий
Меняем тип возвращаемого значения на
Сравниваем поведение при вызове:
🔥 Это устраняет аллокации при синхронном завершении и снижает нагрузку на сборщик мусора.
➡️ C# Ready | #практика
Частые асинхронные вызовы с
Task создают лишние объекты, а ValueTask поможет их избежать.Объявляем обычный метод, возвращающий
Task:// Обычный Task<int>
async Task<int> GetValueAsync(bool cached) {
if (cached) return 42;
await Task.Delay(100);
return 42;
}
Меняем тип возвращаемого значения на
ValueTask:// ValueTask<int> для кеша
async ValueTask<int> GetValueValueAsync(bool cached) {
if (cached) return 42;
await Task.Delay(100);
return 42;
}
Сравниваем поведение при вызове:
// Вызов примеров
var r1 = await GetValueAsync(true);
var r2 = await GetValueAsync(false);
var v1 = await GetValueValueAsync(true);
var v2 = await GetValueValueAsync(false);
Console.WriteLine(r1 + r2);
🔥 Это устраняет аллокации при синхронном завершении и снижает нагрузку на сборщик мусора.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤7👍5
Как избавиться от бесконечных if (obj != null)?
Во вложенных моделях null-проверки быстро разрастаются:
С null-операторами и
🔥 Так что,
➡️ C# Ready | #совет
Во вложенных моделях null-проверки быстро разрастаются:
string city;
if (user != null &&
user.Address != null &&
user.Address.City != null) {
city = user.Address.City;
} else {
city = "Не указан";
}
С null-операторами и
pattern matching то же самое пишется компактно:var city = user?.Address?.City ?? "Не указан";
if (user?.Manager is not null) {
Notify(user.Manager);
}
?. безопасно проходит по цепочке, ?? подставляет значение по умолчанию, а is not null убирает лишние проверки.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤9👍5
Код может падать, но не обязан. Исключения позволяют грамотно обрабатывать сбои, сохраняя логику и устойчивость приложения даже в непредсказуемых ситуациях.
В этом гайде:
• Покажем, как ловить только нужные ошибки;
• Объясним, зачем сообщать о сбое понятно;
• Научим защищать код от неожиданных ситуаций.
Работа с исключениями — это про надёжность, читаемость и уверенность в поведении твоего приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝16🔥15❤8👍2
Меньше бойлерплейта с primary constructors в C# 12!
Часто сервисы и модели обрастают полями DI и свойствами — код пухнет. В .NET 8 можно объявить всё прямо в заголовке класса.
Было ― вручную пишем конструктор и поля:
Стало ―
🔥 Главное —
➡️ C# Ready | #практика
Часто сервисы и модели обрастают полями DI и свойствами — код пухнет. В .NET 8 можно объявить всё прямо в заголовке класса.
Было ― вручную пишем конструктор и поля:
public class UserService
{
private readonly ILogger<UserService> _logger;
private readonly IUserRepo _repo;
public UserService(ILogger<UserService> logger, IUserRepo repo)
{
_logger = logger;
_repo = repo;
}
public Task<User?> GetAsync(Guid id) => _repo.FindAsync(id, _logger);
}
Стало ―
primary constructor + автоматические свойства:public class UserService(ILogger<UserService> Logger, IUserRepo Repo)
{
public Task<User?> GetAsync(Guid id) => Repo.FindAsync(id, Logger);
}
primary constructors вырезают шаблонный код: меньше строк, чище классы, быстрее читается ревью. Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥6❤4