C# Portal | Программирование
описание
Присоединяйтесь к нашему каналу и погрузитесь в мир для C#-разработчика Сотрудничество, реклама: @devmangx Менеджер: @Spiral_Yuri РКН: https://clck.ru/3FocB6
13 308
подписчиков
Охват к подписчикам
10,4%
ERR
Реакции к просмотрам
0,54%
327 на 37 постов
Пересылки к просмотрам
0,72%
435
Постов в день
1,9
всего 38
Где отзываются чаще
доля реакций к просмотрам- 9 авг.C# 15 позволяет объявить тип, который может быть только одним из заранее заданного набора других типов. Union types. Новое ключевое слово, одна строка, базовый класс не нужен. public record class Cat(string Name); public record class Dog(string Name); public record class Bird(string Name); public union Pet(Cat, Dog, Bird); Теперь Pet может содержать Cat, Dog или Bird — и ничего больше. Pet pet = new Dog("Rex"); string name = pet switch { Dog d => d.Name, Cat c => c.Name, Bird b => b.Name, }; ✔️ Неявное преобразование каждого из допустимых типов напрямую в union ✔️ Компилятор заставляет switch обработать все варианты — пропустите один, и проект не соберётся ✔️ Не нужна иерархия наследования, класс-обёртка или ручные проверки в духе «это Cat или Dog» Пока это предварительная функция в .NET 11, поэтому синтаксис ещё может измениться до релиза. Но попробовать уже сейчас вполне можно, если хотите заранее разобраться с новой возможностью. 👉 @KodBlog1,69%
- 12 авг.C# 12 убрал приличный кусок шаблонного кода, который вы пишете почти в каждом сервисном классе. Если вы до сих пор для каждой зависимости объявляете поле, параметр конструктора и потом отдельно присваиваете одно другому, то пишете три строки там, где теперь нужна одна. Возьмём обычный OrderService. Три readonly-поля. Конструктор с тремя параметрами. Ещё три строки внутри конструктора, где каждый параметр присваивается своему полю. Получается 13 строк, и почти все они нужны только для прокидывания зависимостей. С первичным конструктором та же версия занимает около шести строк. Вы просто указываете зависимости прямо в объявлении класса: OrderService получает IOrderRepo repo, ILogger и IEmailSender email. После этого repo, logger и email можно напрямую использовать в методах. Поведение то же, шаблонного кода почти нет. Перед тем как переписывать всё подряд, стоит помнить три вещи. Больше не нужно повторять каждую зависимость по три раза. Объявляете её один раз — в заголовке класса. Параметры первичного конструктора доступны во всём классе, а не только внутри конструктора, поэтому к ним можно обращаться из любых методов. Тестируемость при этом никуда не исчезает. Моки внедряются точно так же, как раньше. Есть один нюанс, который может сэкономить вам час: параметры первичного конструктора не становятся полями автоматически. Если вам действительно нужно сохранить параметр именно как поле, сделайте это явно. Не додумывайте за компилятор — он сам подскажет. Попробуйте сегодня открыть один сервисный класс и перевести его на первичный конструктор. Посчитайте строки до и после. Разница — это тот шаблонный код, который вам больше не придётся писать. 👉 @KodBlog1,49%
- 10 авг.без подписи1,00%
- 10 авг.Пробовали IExceptionHandler в .NET 10? Это более простой способ глобально обрабатывать исключения. IExceptionHandler встроен в стандартный middleware обработки ошибок. Можно обрабатывать либо все исключения, либо только конкретные типы. А значит, обработчики можно выстраивать в цепочку. 👉 @KodBlog0,97%
- 5 авг.А вы знали? Теперь в C# есть ключевое слово safe 🙃 Оно обязательно для всех P/Invoke-объявлений и полей в структурах с explicit или extended layout. Нужно явно указать либо safe, либо unsafe — если не указать модификатор, код не скомпилируется. 👉 @KodBlog0,89%
- 6 авг.Что предпочитаете? 😂 ForLoop (1) или GotoLoop (2) #dotnet 👉 @KodBlog0,88%
- 14 авг.Хотите использовать Minimal APIs вместе с архитектурой Vertical Slice? Вот довольно простая абстракция: - интерфейс IEndpoint для описания конечных точек; - несколько методов расширения для их автоматической регистрации; - целую функциональность можно оформить как отдельный Minimal API endpoint. Дополнительные затраты при запуске приложения — всего несколько миллисекунд. Практически незаметно. 👉 @KodBlog0,87%
- 13 авг.Не отправляйте несколько SQL-команд в базу данных последовательно. Есть более производительный способ. Когда нужно добавить новую запись, а затем сразу её прочитать, обычно выполняют два SQL-запроса: INSERT и SELECT. С точки зрения выполнения всё нормально, но есть дополнительные расходы: задержка сети и лишние обращения к базе данных. На производительности это вполне может сказаться. С Npgsql этого можно избежать. В нём есть пакетное выполнение запросов. Суть в том, что несколько SQL-команд отправляются в базу данных за одно обращение вместо отдельного вызова Execute для каждой команды. В Npgsql для этого используется NpgsqlBatch: несколько NpgsqlBatchCommand объединяются и отправляются серверу одним запросом. Важная деталь. Если вы сами не начали транзакцию, пакет автоматически выполняется внутри неявной транзакции. Если одна из команд завершается с ошибкой, оставшиеся команды не выполняются, а весь пакет откатывается. 👉 @KodBlog0,86%
- 12 авг.FluentValidation: пример проверки совпадения паролей. https://github.com/karenpayneoregon/vs2026-how-to/tree/master/MatchPasswordsApp 👉 @KodBlog0,82%
- 15 авг.Автор статьи разбирает лучшие практики безопасности REST API в ASP.NET Core. За годы работы он выпустил и проверил множество .NET API и собрал 18 практик, которые, по его опыту, постоянно помогают держать такие системы безопасными. В статье есть примеры кода и разбор HTTPS, JWT, политик авторизации, принципа минимальных привилегий, валидации входных данных, защиты от over-posting, ограничения размера запросов, параметризованных запросов и EF Core, rate limiting, CORS, CSRF, хранения секретов, логирования и других базовых мер. Антон также предлагает сохранить статью как dotnet-security-review-skill для ИИ-агентов и прогнать по ней существующую кодовую базу. По его словам, количество найденных проблем может удивить. 👉 @KodBlog0,77%
- 13 авг.Вышла .NET 11 Preview 7! https://devblogs.microsoft.com/dotnet/dotnet-11-preview-7/ 👉 @KodBlog0,75%
- 11 авг.Предпочитайте внедрение зависимостей вместо создания зависимостей вручную. — Через DI можно управлять временем жизни сервисов. — Проще реализовывать более продвинутые возможности вроде декораторов. — Код становится легче покрывать юнит-тестами, подставляя мок-реализации. Ещё 5 советов по рефакторингу C#: https://milanjovanovic.tech/blog/5-awesome-csharp-refactoring-tips 👉 @KodBlog0,67%