C# Portal | Программирование – Telegram
C# Portal | Программирование
14.9K subscribers
965 photos
118 videos
24 files
808 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для C#-разработчика

Связь: @devmangx

РКН: https://clck.ru/3FocB6
Download Telegram
Динамическая сортировка в EF Core

Пример кода, показывающий, как динамически сортировать данные в EF Core по имени колонки.

Исходный проект: SortByColumnNameApp на GitHub

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴8👍5👎2🔥21
LLM в .NET проще, чем кажется

Создавать AI-приложения на .NET теперь легко. Примеры применения:

- чат-приложения
- суммаризация текста
- категоризация
- распознавание изображений
- семантический поиск

LLM можно запускать локально или через облачное API. Отличный способ не отставать в практическом использовании AI. 🙂

Подробнее: тык

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍6
Устаревший подход к работе с null в C# выглядит так:

• Возвращать null из методов и надеяться на лучшее
• Вставлять десятки проверок if (x != null) повсюду
• Полагаться на то, что разработчики «просто знают», что может быть nullable

И всё это ради чего?

Хрупкий код, скрытые баги и NullReferenceException

Новый путь такой:

• Возвращать пустые значения вместо null (Enumerable.Empty<T>(), string.Empty, [] и т.д.)
• Использовать nullable reference types C# для ловли проблем на этапе компиляции
• Заменять проверки на null паттерном Null Object и оператором null-conditional (?.)

Как начать:

• Включите nullable reference types в вашем .csproj
• Замените возвращаемые null безопасными значениями по умолчанию
• Рефакторьте повторяющиеся проверки null в безопасные обёртки или поведение по умолчанию

Писать безопасный, устойчивый к падениям C# код тяжело.

Но искать NullReferenceException в продакшене в 100 раз сложнее.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
13👎4👍2
Любите ретро-игры и открытый код? На OS Game Clones собрали десятки открытых клонов классических игр. 😎

Теперь можно играть в любимые тайтлы на современных системах, изучать исходники или использовать их как основу для своих проектов. От платформеров до шутеров и градостроительных симуляторов

Всё в свободном доступе и с возможностью модификации.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥4🥰2👍1
Слышали про Refit?

Если нет, позвольте представить.

Refit это типобезопасная библиотека для работы с REST в C#, которая упрощает потребление API.

Вы начинаете с определения API в виде интерфейса с методами и атрибутами, а Refit берет на себя всю "тяжелую работу".

Почему стоит рассмотреть его использование?

- Автоматическая сериализация и десериализация
- Поддержка HTTP-методов
- Строго типизированное определение API

Больше всего мне нравится обертка ApiResponse<T>, которая обрабатывает как содержимое, так и метаданные.

Она также обеспечивает единообразную структуру ответа для ваших сервисов.

Refit можно использовать в проектах любого масштаба, так как он берет на себя "сложные" части, позволяя вам сосредоточиться на логике приложения.

Тем не менее, это не универсальное решение, используйте с умом. 🍺

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84
This media is not supported in your browser
VIEW IN TELEGRAM
LeetCode только что добавил AI, который решает задачи за тебя.


Тогда какой, блин, вообще смысл, лол. 😂

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
😁40👍2
Правильный выбор индекса ускорил SQL-запрос в 70 раз.

Милан рассказал, что изначально выборка необработанных сообщений из таблицы шла медленно, данные вытягивались батчами по 1000 строк, а в плане выполнения фигурировал тяжёлый Table scan с фильтрацией и сортировкой. При миллионах строк такой подход оказывался слишком дорогим.

После добавления покрывающего индекса план изменился на более лёгкий:

→ Index only scan → Limit

Главное преимущество в том, что таблица не читается вообще — все данные берутся напрямую из индекса.

Милан отмечает, это не универсальное решение, а точечная оптимизация. Однако в сценариях, где важна предельная производительность, приём показывает впечатляющий результат.

Подробнее об оптимизации запросов можно прочитать здесь

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
Вместо того чтобы:

→ Держать в коде сложное вычисление
→ Которое трудно понять

Сделайте так:

1. Найдите сложное выражение в коде.
2. Введите новую переменную с понятным именем для хранения результата.
3. Замените сложное выражение на эту переменную.
4. Скомпилируйте и протестируйте.

Такой рефакторинг называется Introduce Explaining Variable («Введение объясняющей переменной»).

И он быстро сделает ваш код понятнее.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
😐7👍2😁2👌21
dotnet-backend-template-12.09.2025 (2).zip
266.3 KB
Сохраняйте этот проверенный шаблон бэкенда на .NET — собранный по лучшим отраслевым практикам, чтобы ты мог сосредоточиться на разработке действительно важных функций.

ASP.NET Core Web API, EF Core, PostgreSQL, аутентификация и авторизация, OpenTelemetry, FluentValidation, Swagger, Docker и многое другое

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
9👎3🔥2
Бенчмарк производительности LINQ

Ранее видел это на LinkedIn — возможно, бенчмарк немного искусственный, но всё же хорошо показывает улучшения производительности между версиями .NET.

https://gist.github.com/jackmott/4b6b12f6d05997783a9fa1accd0b2c7b

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
Исключения не для управления потоком

Исключения применимы только для непредвиденных ситуаций. Когда ими заменяют обычные условия, код становится менее читаемым, сложнее в отладке и работает медленнее.

Решение — использовать Result Pattern. Возврат объекта с полями IsSuccess или IsError, Value и Error делает API предсказуемым, код чище, тесты проще и повышает производительность.

Уже есть готовые NuGet-пакеты вроде FluentResults, CSharpFunctionalExtensions, Ardalis Result и error-or, но реализовать такой паттерн можно и самостоятельно.

Здесь лучший гайд по тому, как использовать Result Pattern в реальных приложениях

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3
Топ-3 встроенных обобщённых делегата в C#: Func, Action и Predicate

Делегаты — это указатели на функции. Они помогают в коммуникации и колбэках.

В .NET есть три встроенных обобщённых делегата:

1) Func: принимает обобщённый вход и возвращает обобщённый выход
2) Action: принимает обобщённый вход и ничего не возвращает
3) Predicate: принимает обобщённый вход и всегда возвращает Boolean

Эти обобщённые делегаты активно используются во встроенных классах .NET,
и мы можем применять их, чтобы писать делегаты короче.

Хотите увидеть их на реальном примере?

- Создаём класс Student с некоторыми свойствами
- Формируем список объектов типа Student
- Добавляем данные

Некоторые методы LINQ используют делегаты:

- Метод Select принимает Func
- Метод ForEach принимает Action
- Метод FindAll принимает Predicate

А как часто вы используете их в своём коде?🍜

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍2
Знали ли вы, что можно создать гиперссылку, которая откроет Visual Studio и сразу клонирует любой git-репозиторий?

Это очень просто, вот пример: https://vs-open.link/git-clone

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2
Новая C#-библиотека RCParsing, которая предлагает гибридный подход к обработке сложных синтаксисов с отступами.

Разработчики отмечают, что традиционные инструменты часто не справляются с такими задачами, а использование барьерных токенов значительно улучшает качество парсинга. В качестве примера приводится разбор YAML.

Подробнее в статье

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Тонкое, но мощное дополнение в C# 14:

(которое снизит количество NullReferenceException)

Null-conditional assignment (null-условное присваивание).

Этот оператор позволяет присвоить значение члену или элементу объекта только в том случае, если сам объект не равен null.

Это небольшое изменение, но оно может сильно повлиять на читаемость и безопасность кода.

Почему это полезно:

Убирает повторяющиеся проверки на null перед присваиванием.

Упрощает код, делая его легче для понимания.

Безопасно пропускает присваивание, если целевой объект равен null, тем самым избегая NullReferenceException.

См. пример кода

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29❤‍🔥73👍1
Лучший редактор изображений

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
😁23🔥5👏4❤‍🔥1🏆1
image_2025-09-30_07-04-26.png
868.3 KB
Какая единственная стратегия сильнее всего помогает улучшить производительность приложения?

Это — кешировать (почти) всё!

Кеш хранит копии часто используемых данных в быстродоступном месте, сокращая время доступа и снижая нагрузку на основные источники данных.

Преимущества кеширования:

- более быстрое получение данных
- снижение нагрузки на основные хранилища
- улучшение пользовательского опыта

Не ограничивайся только кешированием запросов к базе данных, ведь чтение из кеша гораздо быстрее, чем вызов API.

Как решить, что кешировать?

Лучше спросить себя: а почему бы это не закешировать?

Добавление кеша имеет свою цену, поэтому для каждого кандидата нужно оценить:

- будет ли доступ через кеш быстрее
- стоит ли хранить эти данные
- как часто нужно валидировать
- сколько обращений придётся на одну запись в кеше
- локальный или общий кеш нужен

Нужно помнить, что данные в кеше могут устаревать, и бывают ситуации, когда кеширование неуместно.

Чтобы оценить эффективность кеша, можно отслеживать метрики, например cache misses.

Популярные стратегии кеширования:

🔸Cache-Aside
Приложение само управляет чтением и записью в кеш. При cache miss данные берутся из основного хранилища и добавляются в кеш.

🔸Read-Through
При cache miss кеш автоматически подгружает данные из основного хранилища. Это упрощает работу, так как кеш сам обрабатывает промахи.

🔸Write-Around
Данные пишутся напрямую в основное хранилище, минуя кеш. Полезно, когда записи происходят часто, а чтения — реже.

🔸Write-Back
Сначала данные пишутся в кеш, а позже синхронизируются с основным хранилищем. Снижает количество операций записи, но есть риск потери данных, если синхронизация не успеет выполниться.

🔸Write-Through
Данные одновременно записываются и в кеш, и в основное хранилище. Обеспечивает консистентность, но может увеличивать задержку записи. Подходит там, где критична целостность данных.


👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3❤‍🔥2
Как проще всего запускать фоновые задачи в .NET?

Фоновые задачи — это процессы или операции, которые выполняются независимо от основного потока выполнения программы или приложения.

Обычно такие задачи работают в фоне, часто без прямого взаимодействия с пользователем, и могут выполнять различные функции, например:

отправка уведомлений

периодические задачи

задачи по расписанию

обработка сообщений

асинхронная обработка

обработка данных в реальном времени


Для этого в .NET можно использовать IHostedService.

Он содержит два метода:

- StartAsync
- StopAsync

Мы можем добавить в него нужное действие, достаточно зарегистрировать этот сервис в Program и всё будет готово.

Такой подход подходит для простых фоновых задач. Для более продвинутых сценариев можно использовать следующие NuGet-пакеты:

- Hangfire
- Quartz

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113
Вышла онлайн IDE для .NET

Теперь приложения на C# и XAML можно писать прямо в браузере. 👨‍💻

IDE работает на WebAssembly, поддерживает drag-and-drop UI, сохранение проектов в облако или на ПК и компиляцию через Roslyn прямо в клиенте.

Запуск выполняется в отдельном iframe, чтобы интерфейс не подвисал, а в планах - автодополнение кода, AI-ассистент и шэринг проектов.

Попробовать можно на xaml.io

подробнее — Habr

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👎116👍5🤔2
Примеры полнотекстового поиска в Entity Framework:

Если ваша СУБД поддерживает эту возможность и вам действительно нужен поиск с подстановочными символами, рассмотрите использование полнотекстового поиска для более эффективных запросов.

// Полнотекстовый поиск по связанным терминам и словоформам  
// (например, "climate change", "climatic changes").
var resultsFreeText = context
.Articles
.Where(a => EF.Functions.FreeText(a.Content, "climate change")).ToList();


// Полнотекстовый поиск с операторами (AND, OR, NEAR) для точного совпадения фразы.
var resultsContains = context
.Articles
.Where(a => EF.Functions.Contains(a.Content, "climate change")).ToList();


👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65
Как на самом деле выполняется C#-код?

1. Вы пишете .cs-файл.

2. Компилятор (Roslyn) преобразует его в IL (Intermediate Language — промежуточный язык).

3. IL сохраняется в сборках (.dll / .exe).

Во время выполнения CLR :

- загружает сборки,

- проверяет IL на безопасность,

- компилирует «горячие» участки кода в машинные инструкции через JIT-компилятор.

CLR также обеспечивает сборку мусора, управление памятью и доступ к базовой библиотеке классов (System.*).

В итоге ваш C#-код работает как эффективный машинный код, сохраняя при этом типобезопасность, переносимость и удобство разработки.

Понимание этого пайплайна помогает при отладке проблем с производительностью, работе с зависимостями из NuGet и выборе между JIT- и AOT-компиляцией.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍255