Вопрос для C#
Смотрим на код (слайд 1):
-
- Вы перебираете элементы в цикле
- Используется
Вопрос: почему всё равно появляется предупреждение или ошибка?
Подумайте немного⌚️
На слайде 2 — правильный ответ.
Причина в том, что
В отличие от обычного return, который сразу завершает метод, yield return просто отдаёт один элемент и приостанавливает выполнение. Цикл продолжает выполняться дальше.
Поэтому, если нужно пропустить итерацию, нужно использовать continue. Иначе выполнение продолжается, и можно столкнуться с неожиданными результатами или исключениями.
Классическая тонкость C# и знать её важно для собеседований.
👉 @KodBlog
Смотрим на код (слайд 1):
-
ProductStock не равен null- Вы перебираете элементы в цикле
- Используется
yield return внутри циклаВопрос: почему всё равно появляется предупреждение или ошибка?
Подумайте немного
На слайде 2 — правильный ответ.
Причина в том, что
yield return не останавливает выполнение цикла.В отличие от обычного return, который сразу завершает метод, yield return просто отдаёт один элемент и приостанавливает выполнение. Цикл продолжает выполняться дальше.
Поэтому, если нужно пропустить итерацию, нужно использовать continue. Иначе выполнение продолжается, и можно столкнуться с неожиданными результатами или исключениями.
Классическая тонкость C# и знать её важно для собеседований.
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
В сборнике собраны официальная документация, туториалы, лучшие блоги и видео, а также экспертные советы от .NET Technical Lead и Microsoft MVP с 11+ лет опыта.
Это не просто очередной PDF, а полный учебный гид для разработчиков, который поможет быстро прокачать знания и навыки.
За это и лайка не жалко
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
Он запустил собственного ИИ-агента — stackoverflow.ai. Он отвечает только на основе проверенных ответов сообщества, подбирая прямые цитаты из них.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33❤4👍2
Нужна ли сервисная дискавери и зачем
В микросервисной архитектуре часто встает вопрос: как сервисы находят друг друга и надежно общаются
Хардкодить IP и порты — прямой путь к проблемам. Если сервис переезжает или запускается новый экземпляр, весь стек может сломаться
Сервисная дискавери позволяет обращаться к внешним сервисам по логическим именам, а не по физическим адресам и портам
Для этого обычно нужен сервисный реестр — централизованное место, где сервисы регистрируют себя. Клиенты обращаются к реестру, чтобы получить актуальный физический адрес сервиса
Рабочий процесс выглядит так
1. Сервис регистрируется в сервисном реестре
2. Клиент обращается к реестру, чтобы узнать физический адрес сервиса
3. Клиент отправляет запрос на этот физический адрес
В .NET это можно реализовать через Consul. Вот подробный туториал
Consul — популярное решение для распределенных систем
Есть более легковесное решение от Aspire, но там физические адреса задаются через конфигурацию приложения, поэтому оно менее надежное и гибкое
👉 @KodBlog
В микросервисной архитектуре часто встает вопрос: как сервисы находят друг друга и надежно общаются
Хардкодить IP и порты — прямой путь к проблемам. Если сервис переезжает или запускается новый экземпляр, весь стек может сломаться
Сервисная дискавери позволяет обращаться к внешним сервисам по логическим именам, а не по физическим адресам и портам
Для этого обычно нужен сервисный реестр — централизованное место, где сервисы регистрируют себя. Клиенты обращаются к реестру, чтобы получить актуальный физический адрес сервиса
Рабочий процесс выглядит так
1. Сервис регистрируется в сервисном реестре
2. Клиент обращается к реестру, чтобы узнать физический адрес сервиса
3. Клиент отправляет запрос на этот физический адрес
В .NET это можно реализовать через Consul. Вот подробный туториал
Consul — популярное решение для распределенных систем
Есть более легковесное решение от Aspire, но там физические адреса задаются через конфигурацию приложения, поэтому оно менее надежное и гибкое
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Принесли ещё одну огромную подборку бесплатных API.
Внутри 1511 штук на любой вкус: игры, погода, финансы, здоровье и многое другое.
Забираем тут - publicapis.io🍔
👉 @KodBlog
Внутри 1511 штук на любой вкус: игры, погода, финансы, здоровье и многое другое.
Забираем тут - publicapis.io
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
Пример кода, показывающий, как динамически сортировать данные в EF Core по имени колонки.
Исходный проект: SortByColumnNameApp на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴8👍5👎2🔥2❤1
LLM в .NET проще, чем кажется
Создавать AI-приложения на .NET теперь легко. Примеры применения:
- чат-приложения
- суммаризация текста
- категоризация
- распознавание изображений
- семантический поиск
LLM можно запускать локально или через облачное API. Отличный способ не отставать в практическом использовании AI.🙂
Подробнее: тык
👉 @KodBlog
Создавать AI-приложения на .NET теперь легко. Примеры применения:
- чат-приложения
- суммаризация текста
- категоризация
- распознавание изображений
- семантический поиск
LLM можно запускать локально или через облачное API. Отличный способ не отставать в практическом использовании AI.
Подробнее: тык
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍6
Устаревший подход к работе с null в C# выглядит так:
• Возвращать
• Вставлять десятки проверок
• Полагаться на то, что разработчики «просто знают», что может быть
И всё это ради чего?
Хрупкий код, скрытые баги и
Новый путь такой:
• Возвращать пустые значения вместо null (Enumerable.Empty<T>(), string.Empty, [] и т.д.)
• Использовать nullable reference types C# для ловли проблем на этапе компиляции
• Заменять проверки на null паттерном Null Object и оператором null-conditional (?.)
Как начать:
• Включите nullable reference types в вашем .csproj
• Замените возвращаемые null безопасными значениями по умолчанию
• Рефакторьте повторяющиеся проверки null в безопасные обёртки или поведение по умолчанию
Писать безопасный, устойчивый к падениям C# код тяжело.
Но искать
👉 @KodBlog
• Возвращать
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 раз сложнее.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
Больше всего мне нравится обертка
Она также обеспечивает единообразную структуру ответа для ваших сервисов.
Refit можно использовать в проектах любого масштаба, так как он берет на себя "сложные" части, позволяя вам сосредоточиться на логике приложения.
Тем не менее, это не универсальное решение, используйте с умом.🍺
👉 @KodBlog
Если нет, позвольте представить.
Refit это типобезопасная библиотека для работы с REST в C#, которая упрощает потребление API.
Вы начинаете с определения API в виде интерфейса с методами и атрибутами, а Refit берет на себя всю "тяжелую работу".
Почему стоит рассмотреть его использование?
- Автоматическая сериализация и десериализация
- Поддержка HTTP-методов
- Строго типизированное определение API
Больше всего мне нравится обертка
ApiResponse<T>, которая обрабатывает как содержимое, так и метаданные.Она также обеспечивает единообразную структуру ответа для ваших сервисов.
Refit можно использовать в проектах любого масштаба, так как он берет на себя "сложные" части, позволяя вам сосредоточиться на логике приложения.
Тем не менее, это не универсальное решение, используйте с умом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4
This media is not supported in your browser
VIEW IN TELEGRAM
LeetCode только что добавил AI, который решает задачи за тебя.
Тогда какой, блин, вообще смысл, лол.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁40👍2
Правильный выбор индекса ускорил SQL-запрос в 70 раз.
Милан рассказал, что изначально выборка необработанных сообщений из таблицы шла медленно, данные вытягивались батчами по 1000 строк, а в плане выполнения фигурировал тяжёлый Table scan с фильтрацией и сортировкой. При миллионах строк такой подход оказывался слишком дорогим.
После добавления покрывающего индекса план изменился на более лёгкий:
→ Index only scan → Limit
Главное преимущество в том, что таблица не читается вообще — все данные берутся напрямую из индекса.
Милан отмечает, это не универсальное решение, а точечная оптимизация. Однако в сценариях, где важна предельная производительность, приём показывает впечатляющий результат.
Подробнее об оптимизации запросов можно прочитать здесь
👉 @KodBlog
Милан рассказал, что изначально выборка необработанных сообщений из таблицы шла медленно, данные вытягивались батчами по 1000 строк, а в плане выполнения фигурировал тяжёлый Table scan с фильтрацией и сортировкой. При миллионах строк такой подход оказывался слишком дорогим.
После добавления покрывающего индекса план изменился на более лёгкий:
→ Index only scan → Limit
Главное преимущество в том, что таблица не читается вообще — все данные берутся напрямую из индекса.
Милан отмечает, это не универсальное решение, а точечная оптимизация. Однако в сценариях, где важна предельная производительность, приём показывает впечатляющий результат.
Подробнее об оптимизации запросов можно прочитать здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Вместо того чтобы:
→ Держать в коде сложное вычисление
→ Которое трудно понять
Сделайте так:
1. Найдите сложное выражение в коде.
2. Введите новую переменную с понятным именем для хранения результата.
3. Замените сложное выражение на эту переменную.
4. Скомпилируйте и протестируйте.
Такой рефакторинг называется Introduce Explaining Variable («Введение объясняющей переменной»).
И он быстро сделает ваш код понятнее.
👉 @KodBlog
→ Держать в коде сложное вычисление
→ Которое трудно понять
Сделайте так:
1. Найдите сложное выражение в коде.
2. Введите новую переменную с понятным именем для хранения результата.
3. Замените сложное выражение на эту переменную.
4. Скомпилируйте и протестируйте.
Такой рефакторинг называется Introduce Explaining Variable («Введение объясняющей переменной»).
И он быстро сделает ваш код понятнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
😐7👍2😁2👌2❤1
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
ASP.NET Core Web API, EF Core, PostgreSQL, аутентификация и авторизация, OpenTelemetry, FluentValidation, Swagger, Docker и многое другое
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👎3🔥2
Бенчмарк производительности LINQ
Ранее видел это на LinkedIn — возможно, бенчмарк немного искусственный, но всё же хорошо показывает улучшения производительности между версиями .NET.
https://gist.github.com/jackmott/4b6b12f6d05997783a9fa1accd0b2c7b
👉 @KodBlog
Ранее видел это на LinkedIn — возможно, бенчмарк немного искусственный, но всё же хорошо показывает улучшения производительности между версиями .NET.
https://gist.github.com/jackmott/4b6b12f6d05997783a9fa1accd0b2c7b
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
Исключения применимы только для непредвиденных ситуаций. Когда ими заменяют обычные условия, код становится менее читаемым, сложнее в отладке и работает медленнее.
Решение — использовать Result Pattern. Возврат объекта с полями IsSuccess или IsError, Value и Error делает API предсказуемым, код чище, тесты проще и повышает производительность.
Уже есть готовые NuGet-пакеты вроде FluentResults, CSharpFunctionalExtensions, Ardalis Result и error-or, но реализовать такой паттерн можно и самостоятельно.
Здесь лучший гайд по тому, как использовать Result Pattern в реальных приложениях
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3
Топ-3 встроенных обобщённых делегата в C#: Func, Action и Predicate
Делегаты — это указатели на функции. Они помогают в коммуникации и колбэках.
В .NET есть три встроенных обобщённых делегата:
1)
2)
3)
Эти обобщённые делегаты активно используются во встроенных классах .NET,
и мы можем применять их, чтобы писать делегаты короче.
Хотите увидеть их на реальном примере?
- Создаём класс
- Формируем список объектов типа
- Добавляем данные
Некоторые методы LINQ используют делегаты:
- Метод Select принимает Func
- Метод ForEach принимает Action
- Метод FindAll принимает Predicate
А как часто вы используете их в своём коде?🍜
👉 @KodBlog
Делегаты — это указатели на функции. Они помогают в коммуникации и колбэках.
В .NET есть три встроенных обобщённых делегата:
1)
Func: принимает обобщённый вход и возвращает обобщённый выход2)
Action: принимает обобщённый вход и ничего не возвращает3)
Predicate: принимает обобщённый вход и всегда возвращает BooleanЭти обобщённые делегаты активно используются во встроенных классах .NET,
и мы можем применять их, чтобы писать делегаты короче.
Хотите увидеть их на реальном примере?
- Создаём класс
Student с некоторыми свойствами- Формируем список объектов типа
Student- Добавляем данные
Некоторые методы LINQ используют делегаты:
- Метод Select принимает Func
- Метод ForEach принимает Action
- Метод FindAll принимает Predicate
А как часто вы используете их в своём коде?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍2
Знали ли вы, что можно создать гиперссылку, которая откроет Visual Studio и сразу клонирует любой git-репозиторий?
Это очень просто, вот пример: https://vs-open.link/git-clone
👉 @KodBlog
Это очень просто, вот пример: https://vs-open.link/git-clone
Please open Telegram to view this post
VIEW IN TELEGRAM
Visual Studio Protocol Handlers
Git Clone Link Generator - Visual Studio Protocol Handler
Generate shareable Git clone URLs that open repositories directly in Visual Studio. Create one-click repository clone links with QR codes for easy sharing.
🔥5👍2