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

Связь: @devmangx

РКН: https://clck.ru/3FocB6
Download Telegram
Вопрос для C#

Смотрим на код (слайд 1):

- ProductStock не равен null
- Вы перебираете элементы в цикле
- Используется yield return внутри цикла

Вопрос: почему всё равно появляется предупреждение или ошибка?

Подумайте немного ⌚️

На слайде 2 — правильный ответ.

Причина в том, что yield return не останавливает выполнение цикла.

В отличие от обычного return, который сразу завершает метод, yield return просто отдаёт один элемент и приостанавливает выполнение. Цикл продолжает выполняться дальше.

Поэтому, если нужно пропустить итерацию, нужно использовать continue. Иначе выполнение продолжается, и можно столкнуться с неожиданными результатами или исключениями.

Классическая тонкость C# и знать её важно для собеседований.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍11🔥3😁2
doc_2025-09-19_09-49-11.net-developer-resources.pdf
4.3 MB
Вышел бесплатный PDF с 650+ с отобранными вручную ресурсами для прокачки C#, .NET, ASP.NET Core, EF Core и микросервисов.

В сборнике собраны официальная документация, туториалы, лучшие блоги и видео, а также экспертные советы от .NET Technical Lead и Microsoft MVP с 11+ лет опыта.

Это не просто очередной PDF, а полный учебный гид для разработчиков, который поможет быстро прокачать знания и навыки.

За это и лайка не жалко 🫡

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍12😁2
This media is not supported in your browser
VIEW IN TELEGRAM
После сильного падения трафика StackOverflow наконец-то совершил камбэк ❤️

Он запустил собственного ИИ-агента — stackoverflow.ai. Он отвечает только на основе проверенных ответов сообщества, подбирая прямые цитаты из них.

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥334👍2
Нужна ли сервисная дискавери и зачем

В микросервисной архитектуре часто встает вопрос: как сервисы находят друг друга и надежно общаются

Хардкодить IP и порты — прямой путь к проблемам. Если сервис переезжает или запускается новый экземпляр, весь стек может сломаться

Сервисная дискавери позволяет обращаться к внешним сервисам по логическим именам, а не по физическим адресам и портам

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

Рабочий процесс выглядит так

1. Сервис регистрируется в сервисном реестре
2. Клиент обращается к реестру, чтобы узнать физический адрес сервиса
3. Клиент отправляет запрос на этот физический адрес

В .NET это можно реализовать через Consul. Вот подробный туториал

Consul — популярное решение для распределенных систем

Есть более легковесное решение от Aspire, но там физические адреса задаются через конфигурацию приложения, поэтому оно менее надежное и гибкое

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍2
Аутентификация подтверждает, кто вы. Авторизация решает, что вам разрешено делать.

В этом курсе вы научитесь создавать ASP.NET-приложения, которые умеют выдавать JWT, регистрировать и логинить пользователей, управлять ролями и многое другое. ☀️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Принесли ещё одну огромную подборку бесплатных API.

Внутри 1511 штук на любой вкус: игры, погода, финансы, здоровье и многое другое.

Забираем тут - publicapis.io 🍔

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍2
Visual Studio 2026 показывает результаты условных операторов (if) прямо в коде во время отладки.

Скоро будет доступно ⌨️

👉 @KodBlog
Please open Telegram to view this post
VIEW IN TELEGRAM
40🔥11👏3🕊3
Динамическая сортировка в 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