Почему string.IsNullOrWhiteSpace() лучше, чем несколько проверок подряд?
Когда нужно понять, что строка пустая или не заполнена, ручные проверки быстро делают условие шумным.
При чтении приходится разбирать детали:
Например, такой код:
работает, но читается не так просто, как мог бы.
Сразу приходится смотреть, какие именно случаи мы проверяем и не забыли ли что-то по пути.
Гораздо понятнее выглядит такой вариант:
Здесь намерение видно сразу: строка не содержит нормального значения.
Не нужно вчитываться в детали условия — метод уже говорит всё за нас.
Особенно полезно это в валидации, обработке ввода, DTO, командах и любых местах, где строка приходит извне и может оказаться пустой или состоять только из пробелов.
🔥 Маленькая замена, а условие становится заметно легче для чтения.
➡️ C# Ready | #совет
Когда нужно понять, что строка пустая или не заполнена, ручные проверки быстро делают условие шумным.
При чтении приходится разбирать детали:
null, пустая строка, сравнения, операторы ||.Например, такой код:
if (name == null || name == "")
{
return;
}
работает, но читается не так просто, как мог бы.
Сразу приходится смотреть, какие именно случаи мы проверяем и не забыли ли что-то по пути.
Гораздо понятнее выглядит такой вариант:
if (string.IsNullOrWhiteSpace(name))
{
return;
}
Здесь намерение видно сразу: строка не содержит нормального значения.
Не нужно вчитываться в детали условия — метод уже говорит всё за нас.
Особенно полезно это в валидации, обработке ввода, DTO, командах и любых местах, где строка приходит извне и может оказаться пустой или состоять только из пробелов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍8🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь собраны основные конструкции языка и типовые задачи, с которыми сталкиваются разработчики. Материал ориентирован на практику, показаны частые проблемы и подходы к их решению, что делает его удобным как быстрый справочник.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤10👍7
Почему var иногда читается лучше, чем явный тип?
Когда тип и так очевиден из правой части выражения, его повторение слева не добавляет пользы.
Наоборот — строка становится тяжелее, и глазу приходится дважды считывать одну и ту же информацию.
Например, здесь:
код формально понятный, но перегруженный.
Тип уже явно указан в момент создания объекта, поэтому повтор слева только делает запись длиннее.
Гораздо проще читается такой вариант:
Здесь внимание уходит не на длинное имя типа, а на сам смысл переменной.
Код выглядит легче, чище и быстрее считывается.
Важно:
Если по правой части непонятно, что лежит в переменной, явный тип может быть полезнее.
🔥 То есть идея не в том, чтобы писать
➡️ C# Ready | #совет
Когда тип и так очевиден из правой части выражения, его повторение слева не добавляет пользы.
Наоборот — строка становится тяжелее, и глазу приходится дважды считывать одну и ту же информацию.
Например, здесь:
Dictionary<string, List<User>> usersByRole = new Dictionary<string, List<User>>();
код формально понятный, но перегруженный.
Тип уже явно указан в момент создания объекта, поэтому повтор слева только делает запись длиннее.
Гораздо проще читается такой вариант:
var usersByRole = new Dictionary<string, List<User>>();
Здесь внимание уходит не на длинное имя типа, а на сам смысл переменной.
Код выглядит легче, чище и быстрее считывается.
Важно:
var хорошо работает именно там, где тип очевиден сразу.Если по правой части непонятно, что лежит в переменной, явный тип может быть полезнее.
var везде, а в том, чтобы убирать лишний визуальный шум там, где он не нужен.Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍7🔥6
В этой статье:
• Базовая подготовка: dotnet new + VS Code, установка шаблонов Avalonia• Разметка интерфейса на Grid и биндинги MVVM через ReactiveUI• Стилизация: от локальных сеттеров до готовой Material-темы🟡 Рекомендую прочитать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23🤝10❤4👍2
Например, Factory помогает делегировать создание объектов, а Observer — удобно реализовать систему подписок и событий.
На картинке — 9 самых нужных паттернов, которые часто встречаются в реальных проектах и архитектуре.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤9👍7🤝1
Почему Count читается лучше, чем Count()?
Когда у нас уже есть конкретная коллекция, например
Например, здесь:
формально всё работает, но при чтении возникает лишний вопрос: зачем здесь LINQ-метод, если коллекция и так уже известна?
Гораздо проще воспринимается такой вариант:
Здесь код читается прямолинейно: у коллекции есть количество элементов, мы его и проверяем.
Это особенно актуально в местах, где важна простота чтения: в
Важно только помнить: такой подход подходит именно тогда, когда тип коллекции уже известен.
Если перед вами
🔥 Маленькая замена, а код выглядит чище и естественнее уже с первого взгляда.
➡️ C# Ready | #совет
Когда у нас уже есть конкретная коллекция, например
List<T> или массив, количество элементов можно получить напрямую через свойство. В таком случае запись через Count() выглядит чуть тяжелее, чем нужно.Например, здесь:
if (users.Count() > 0)
{
SendPromo(users);
}
формально всё работает, но при чтении возникает лишний вопрос: зачем здесь LINQ-метод, если коллекция и так уже известна?
Гораздо проще воспринимается такой вариант:
if (users.Count > 0)
{
SendPromo(users);
}
Здесь код читается прямолинейно: у коллекции есть количество элементов, мы его и проверяем.
Это особенно актуально в местах, где важна простота чтения: в
if, валидации, guard-условиях и любой повседневной бизнес-логике.Важно только помнить: такой подход подходит именно тогда, когда тип коллекции уже известен.
Если перед вами
IEnumerable<T>, то свойства Count у него может не быть, и это уже другая ситуация.Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥5🤝3
Нашёл свежий разбор про labeled break и continue в C# 15 — фичу, которая может сделать выход из вложенных циклов чуть понятнее, но при неправильном использовании легко ухудшит читаемость.
В статье:
• как обычно выходят из нескольких вложенных циклов• что предлагают labeled break и continue• почему новая возможность не отменяет нормальный рефакторинг кода🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍2🔥2
Отслеживаем изменения в папке через FileSystemWatcher — мгновенный отклик без опроса!
Иногда нужно сразу реагировать, когда в каталоге появляется новый файл отчёта или изменяется конфигурация. Вместо бесконечных таймеров используем встроенный наблюдатель файловой системы.
Сначала задаём путь и настраиваем watcher: реагируем на создание и изменение только
Обработчик получает данные об изменении и выводит краткую информацию:
Чтобы консольное приложение не завершилось раньше времени, просто ждём клавишу:
🔥
➡️ C# Ready | #практика
Иногда нужно сразу реагировать, когда в каталоге появляется новый файл отчёта или изменяется конфигурация. Вместо бесконечных таймеров используем встроенный наблюдатель файловой системы.
Сначала задаём путь и настраиваем watcher: реагируем на создание и изменение только
.txt-файлов, подписываемся на события Created и Changed:using System.IO;
string path = @"C:\Watched";
using var watcher = new FileSystemWatcher(path, "*.txt")
{
NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite,
IncludeSubdirectories = false,
// или true — если нужны подпапки
EnableRaisingEvents = true
// запускаем слежение
};
watcher.Created += OnChanged;
watcher.Changed += OnChanged;
Обработчик получает данные об изменении и выводит краткую информацию:
static void OnChanged(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {e.ChangeType}: {e.FullPath}");
}
Чтобы консольное приложение не завершилось раньше времени, просто ждём клавишу:
Console.WriteLine($"👀 Слежение за {path} запущено. Нажмите Enter для выхода…");
Console.ReadLine();🔥
FileSystemWatcher избавляет от циклов опроса: оперативно, без лишних ресурсов и под любые типы файлов.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤5👍5😁2
Получаем имя переменной с nameof безопасно!
Иногда нужно передать имя переменной, свойства или метода в виде строки.
Например, можно написать так:
Такой код работает, но строка
Если потом переименовать переменную, строка не изменится автоматически.
В C# для этого есть оператор
Вот что получится при запуске:
Это удобно, например, при проверке аргументов:
Теперь при переименовании параметра
🔥
➡️ C# Ready | #практика
Иногда нужно передать имя переменной, свойства или метода в виде строки.
Например, можно написать так:
string userName = "Анна";
Console.WriteLine("userName");
Такой код работает, но строка
"userName" никак не связана с самой переменной.Если потом переименовать переменную, строка не изменится автоматически.
В C# для этого есть оператор
nameof:string userName = "Анна";
Console.WriteLine(nameof(userName));
nameof возвращает имя переменной, свойства, класса или метода в виде строки.Вот что получится при запуске:
userName
Это удобно, например, при проверке аргументов:
void PrintName(string name)
{
if (name == null)
throw new ArgumentNullException(nameof(name));
Console.WriteLine(name);
}
Теперь при переименовании параметра
name IDE обновит и использование внутри nameof.nameof помогает избежать ошибок в строках и делает код безопаснее при рефакторингеPlease open Telegram to view this post
VIEW IN TELEGRAM
❤7👍7🔥5😁1
Например, GET используют для получения данных, POST — для создания, PUT/PATCH — для обновления, а DELETE — для удаления ресурса.
На шпаргалке — принципы REST, HTTP-методы, версионирование, пагинация, фильтрация и best practices для API.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥10👍5
nameof помогает брать имя свойства, метода или переменной прямо из кода, а не писать его руками обычной строкой.Что важно знать:
• nameof возвращает имя элемента в виде строки
• При переименовании IDE обновит ссылку, а не оставит старый текст
• Особенно полезен в логах, ошибках, валидации и отладке
Маленькая фича, которая убирает “магические строки” и делает код спокойнее при рефакторинге.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🤝6❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Он собрал в себе подробные статьи, пошаговые руководства и примеры кода по C#, ASP․NET, Blazor, Entity Framework и другим технологиям экосистемы Microsoft.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍6🔥6