C# (C Sharp) programming
18.7K subscribers
816 photos
42 videos
8 files
709 links
По всем вопросам- @haarrp

C# - обучающий канал Senior C# разработчика.

@ai_machinelearning_big_data - Machine learning

@itchannels_telegram - 🔥лучшие ит-каналы

@csharp_ci - C# академия

@pythonlbooks- книги📚

Реестр РКН: https://clck.ru/3Fk3kb
Download Telegram
YeSQL .NET v1.0.0 выпущен 🚀

YeSQL .NET - это библиотека классов для загрузки SQL-запросов из SQL-файлов.

Нет необходимости жестко кодировать SQL-код в исходном коде приложения.

Создайте файл с расширением .sql и используйте YeSQL .NET для загрузки SQL-файла.

Install-Package YeSql.Net

#dotnet #csharp #oss #sql

Github
Docs

@csharp_ci
.NET 9 новые бенчмарки LINQ CountBy .

Код

#dotnet #csharp

@csharp_ci
🖥 Что вы предпочитайте string.Equals или ToLower/Upper

В C# для сравнения строк без учета регистра лучше использовать string.Equals с OrdinalIgnoreCase, а не ToLower() / ToUpper().

Почему?

Корректность
Иногда использование ToLower/Upper может привести к неправильным результатам в некоторых языках (например на Турецком).

Удобство чтения
Использование string.Equals дает понять, что вы выполняете сравнение.

Производительность
string.Equals более эффективен, поскольку ему не нужно создавать новый экземпляр строки, как это делает ToLower/Upper.

#dotnet #csharp

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥Первая предварительная версия dotnet 9 уже здесь, наряду с обновлениями для #aspnetcore, #dotnetmaui, #efcore и других!

Почитать
больше о предварительной версии 1 и присоединяйтесь к обсуждению на GitHub Discussions: https://github.com/dotnet/core/discussions/9167

#dotnet #csharp

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Новый выпусе- Microsoft .Data.SqlClient 5.2 - с .NET 8, поддержкой пакетной обработки Sql и идентификации рабочей нагрузки + многое другое - смотрите примечания к выпуску:

📌 Релиз

#dotnet #sqlserver

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Руководство по .NET Async от Дэвида Фаулера .

Множество отличных рекомендаций о том, как правильно использовать Async на плохих и хороших примерах.

Сохраняйте себе в закладки.

https://github.com/davidfowl/AspNetCoreDiagnosticScenarios/blob/master/AsyncGuidance.md

#dotnet

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🎊 Сегодня были выпущены новые версии .NET 9.0.1 и 8.0.12

https://github.com/dotnet/announcements/issues/341

#dotnet #aspnetcore #efcore #csharp

@csharp_ci
🚀 .NET 10 Preview 3 уже доступен!
Новая версия приносит мощное обновление для C# — Extension Members:


💡 Теперь можно добавлять в static class расширения не только методов, но и:

🔹 Статические методы
🔹 Инстанс-свойства
🔹 Статические свойства

📦 Это значит, что вы можете "расширять" поведение типов не только логикой, но и дополнительными данными и даже стейтфул-логикой (через свойства).
И всё это — без изменения исходного класса.

🔗 Подробнее:
https://github.com/dotnet/core/blob/main/release-notes/10.0/preview/preview3/csharp.md#extension-members

#dotnet #csharp #dotnet10 #devtools #preview

@csharp_ci
🚀 Релиз: SQL Formatting Preview в T-SQL Analyzer CLI​

В последнем обновлении инструмента T-SQL Analyzer CLI от ErikEJ появилась функция предварительного просмотра форматирования SQL-кода.​

Основные возможности:
Автоматическое форматирование T-SQL скриптов с использованием встроенных правил.​

Интеграция с анализатором кода, позволяющая одновременно проверять и форматировать скрипты.​

Поддержка командной строки, что удобно для автоматизации процессов и интеграции в CI/CD пайплайны.​

🔧 Пример использования:

tsqlanalyze -i "C:\scripts\proc.sql" --format
Эта команда проанализирует и отформатирует указанный SQL-скрипт согласно установленным правилам.​

📌 Подробнее о новых возможностях и инструкциях по установке читайте в официальной документации.​

#sqlserver #tsql #dotnet #cli #devtools

https://github.com/ErikEJ/SqlServer.Rules/tree/master/tools/SqlAnalyzerCli#sql-formatting-preview

@csharp_ci
📚 Модернизация .NET веб-приложений с помощью DotVVM и новой книги Томаша Герцега

В свежем выпуске подкаста [The .NET Core Show](https://dotnetcore.show/season-7/dotnet-web-app-modernization-made-easy-with-tomas-hercegs-new-book-and-dotvvm/) Томаш Герцег — Microsoft MVP и автор фреймворка DotVVM — рассказывает, как безболезненно обновлять устаревшие .NET-приложения.

🔧 Что такое DotVVM

DotVVM — это open-source MVVM-фреймворк, предназначенный для поэтапной миграции с ASP.NET Web Forms на современный .NET:

- Позволяет переписывать старые приложения постепенно, без необходимости полного рефакторинга
- Поддерживает .NET Framework и .NET Core
- Совместим с существующей кодовой базой, не нарушая архитектуру

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

🎧 Слушать эпизод подкаста:
https://dotnetcore.show/season-7/dotnet-web-app-modernization-made-easy-with-tomas-hercegs-new-book-and-dotvvm/

#DotVVM #DotNet #WebForms #ASPNet #Modernization #TomasHerceg #SoftwareDevelopment #LegacyToModern
This media is not supported in your browser
VIEW IN TELEGRAM
🧹 Разделение классов на отдельные файлы в ReSharper — автоматически

Если вы работаете с большими C#‑файлами, где собрано по 3–5 классов в одном месте, ReSharper теперь позволяет разнести все классы по отдельным файлам в один клик.

🔧 Что умеет:
▪️ Автоматически определяет все вложенные классы, интерфейсы, enum’ы
▪️ Создаёт новые `.cs`‑файлы с соответствующими именами
▪️ Упрощает навигацию и соблюдение best practices

📌 Где искать:
Refactor This → Move to Separate Files
или
Context Action (Alt+Enter) → Move All Types to Separate Files

📎 Инструкция от JetBrains:
https://www.jetbrains.com/help/resharper/Move_classes_into_separate_files_in_one_go.html

💡 Подходит для чистки легаси-кода и ускорения навигации в больших проектах .NET.

#CSharp #ReSharper #Refactoring #JetBrains #DotNet #DevTools #CodeQuality
🕹️ NET-NES — эмулятор легендарной NES, написанный на C# и Raylib

После создания собственного эмулятора GameBoy (**CODE-DMG**), следующий шаг был очевиден — NES. Консоль, оставившая след не только в истории видеоигр, но и в электронике, вдохновила на создание нового проекта — NET-NES.

🎮 Что такое NET-NES?
Это NES-эмулятор, написанный на C# с использованием Raylib. Он уже способен запускать множество классических хитов от Nintendo.

📜 Немного истории:
• NES (Nintendo Entertainment System) — вышла в Японии как FamiCom в 1983 году
• В 1985 появилась в Северной Америке, где спасла индустрию после видеоигрового краха 1983 года
• Продавалась как "игрушка" — и изменила всё

🧠 Аппаратная часть NES:
• 8-битный CPU Ricoh 2A03 (~1.79 МГц), основанный на MOS 6502
• Встроенный APU (аудио)
• Видео: Ricoh 2C02 — вывод 256×240, палитра 64 цвета
• 2 КБ RAM + 2 КБ VRAM
• ROM‑картриджи с мапперами для расширения памяти и графики

🛠️ Почему C# и Raylib?
• Потому что C# — удобен, современен и любим
• Raylib — весёлый, минималистичный и идеально подходит для 2D-рендера
• А название NET-NES — от .NET и NES, звучит круто 😄


🔗 GitHub: github.com/Paulescu/NET-NES

#nes #dotnet #emulation #gamedev #csharp #retrogaming

@csharp_ci
⚙️ Background Jobs в ASP.NET Core — просто и эффективно

Хочешь запускать периодические задачи в фоне? В ASP.NET Core это можно реализовать с помощью BackgroundService и PeriodicTimer. Ни Hangfire, ни Quartz не нужны, если всё просто.

🧱 Основные шаги:

1. Включаем конкурентный запуск/остановку сервисов:

builder.Services.Configure<HostOptions>(o =>
{
o.ServicesStartConcurrently = true;
o.ServicesStopConcurrently = true;
});


2. 🌀 Реализуем фоновую задачу:

public class PeriodicBackgroundTask : BackgroundService
{
private readonly TimeSpan _period = TimeSpan.FromSeconds(5);
private readonly ILogger<PeriodicBackgroundTask> _logger;

public PeriodicBackgroundTask(ILogger<PeriodicBackgroundTask> logger)
{
_logger = logger;
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
using PeriodicTimer timer = new PeriodicTimer(_period);
while (!stoppingToken.IsCancellationRequested &&
await timer.WaitForNextTickAsync(stoppingToken))
{
_logger.LogInformation("Executing PeriodicBackgroundTask");
}
}
}


📌 Особенности:
- BackgroundService — стандартный способ запускать фоновые задачи в ASP.NET Core
- PeriodicTimer — простой способ повторять с задержкой
- Встроенный контроль остановки через CancellationToken

💡 Подходит для:
• Регулярных проверок
• Очистки кэша
• Периодических sync-задач

#aspnetcore #dotnet #backgroundjobs #csharp #dev
📘 Обновлённый обзор C#: история версий и ключевые новшества

Microsoft опубликовала подробную хронологию C# — от версии 1.0 до последней, показывая эволюцию языка за 20+ лет:

🕰️ Обзор ключевых этапов:

C# 1.0–2.0 — классика: базовые ООП, exception-обработка, типы значений, generics
C# 3.0 — революция LINQ, lambda`-выражения, автоматические свойства, `var
C# 4.0dynamic, улучшения COM и переговорчивость аннотации
C# 5.0async/await — асинхронность для всех
C# 6.0 — улучшения синтаксиса: string interpolation, expression-bodied members, null-условные выражения
C# 7.xtuples, pattern matching, ref locals, out variables
C# 8.0 — nullable reference types, ranges/indices, асинхронные потоки
C# 9.0record, init-only properties, top-level statements
C# 10 — глобальные using, file-scoped namespace, улучшенные структуры
C# 11 — raw string literals, generic math, pattern matching improvements
C# 12 и далее — ожидаются расширенные метапрограммирование, списочные выражения, улучшения в безопасность и производительности

🔧 Почему это важно:

• Язык постоянно развивается, становясь выразительнее, безопаснее и удобнее
• Новые версии дают мощные инструменты — для асинхронного программирования, функционального стиля и более чистого кода
• Понимание изменений помогает быстрее адаптироваться к трендам и выбирать актуальный инструментальный стек

💡 Если вы разрабатываете на C#, стоит ознакомиться с историей версий — и понять, какие фичи уже доступны, а что стоит ожидать в будущем.

👉 Подробнее

@csharp_ci

#dotnet #csharp #programming #developer #language #whatsnew #technology
Microsoft.Extensions.AI (Preview) — единый способ подключать ИИ в .NET

Библиотеки Microsoft.Extensions.AI призваны упростить жизнь .NET-разработчикам, которые начинают использовать генеративный ИИ в своих приложениях.

🧱 Вместо разрозненных SDK для каждого провайдера — единые "AI building blocks", которые можно подключать и переключать между OpenAI, Azure, Hugging Face и другими.

📦 Что даёт:
– Единый интерфейс для разных AI-провайдеров
– Простая интеграция в pipeline .NET-приложения
– Расширяемая архитектура: можно добавлять собственные провайдеры
– Поддержка RAG-сценариев, чат-интерфейсов, промптинга, трансформаций данных и т.д.

Полезно и для ASP.NET-приложений, и для десктопа, и для фона.

🧪 Пока в превью — но уже можно попробовать:
https://github.com/dotnet/ai-samples?tab=readme-ov-file#microsoftextensionsai-preview

#dotnet #ai #ml #microsoft

@csharp_ci
🔥 Одна из дучших фишек в ASP.NET Core 10 — Server-Sent Events (SSE)

Теперь можно реализовать real-time обновления без SignalR и WebSockets. SSE — это лёгкий способ стримить данные с сервера на клиент *в одну сторону*, идеально для простых задач.

📡 Зачем это нужно?

В .NET-приложениях часто нужно передавать обновления с backend на frontend. Есть несколько способов:

• Polling — клиент всё время спрашивает: «что нового?» (нагружает сервер)
• SignalR — bidirectional WebSockets, но избыточно для простых стримов
• SSE — простой и нативный способ отправлять обновления *односторонне*

Теперь SSE доступен прямо в .NET 10 (preview) и легко интегрируется с Minimal APIs.

🧠 Что сегодня показали:
— Как работает SSE и чем отличается от SignalR
— Как реализовать SSE endpoint с Minimal API
— Как тестировать SSE-поток из IDE (HTTP request file)
— Как собрать frontend для отображения стриминга
— И как создать *живой рынок акций* на SSE — от бэкенда до клиента

👨‍💻 Отличная альтернатива, если нужно real-time, но без всей сложности WebSockets.

#dotnet #aspnetcore #SSE #ServerSentEvents #SignalR #realtime #webdev
.NET 9 — самая быстрая платформа 2025 года

Microsoft прокачала .NET так, что он обгоняет почти все популярные фреймворки: Java, Go, Node.js, Python и даже PHP.

🚀 Что сделали:
- Мусорщик (GC) стал адаптивным → меньше пауз даже при высоких нагрузках.
- JIT-компилятор быстрее разогревает код и оптимизирует горячие участки.
- Векторизация через AVX10 и Arm SVE ускоряет циклы в несколько раз.
- Native AOT уменьшает размер бинарников и ускоряет запуск (контейнеры, IoT, edge).
- Сеть (сокеты, HTTP/3) стала работать быстрее с низкой задержкой.
- JSON обрабатывается через System.Text.Json максимально эффективно.
- Меньше аллокаций → меньше нагрузка на память и GC.
- Thread-pool и многопоточность лучше распределяют задачи по ядрам.
- Минимальные API и оптимизация исключений дали ещё +15% к скорости.

📊 Бенчмарки показывают:
- Java (Spring) — медленнее в 2.5 раза
- Go (Fiber) — в 1.3 раза
- Node.js (Fastify) — в 4 раза
- Python (FastAPI) — в 10 раз
- PHP (Laravel) — в 15 раз
- Ruby (Rails) — в 20 раз

💡 Итог: .NET 9 — быстрый старт, низкая задержка и топ-производительность. Отличный выбор для веба, микросервисов и облака.

#dotnet #performance #benchmark #backend
Exceptions ≠ Errors

Многие разработчики путают эти понятия и проектируют приложения неправильно. Давайте разберём:

Что такое исключение (exception)?
Это ситуация, из которой приложение не может восстановиться.
Пример: критическая ошибка базы данных, повреждённый файл конфигурации.

Что такое ошибка (error)?
Это ожидаемое состояние сбоя или невыполненное предусловие.
Пример: пользователь ввёл неверный пароль, файл не найден, запрос не прошёл валидацию.

👉 Использовать исключения вместо ошибок = анти-паттерн. Так появляется flow control через исключения, который делает код непредсказуемым и запутанным.

Как правильно:
- Ошибки представляем явно в коде (например, через Result, Option, Either паттерны).
- Исключения оставляем для действительно неожиданных и фатальных ситуаций.

Бонус: Явные ошибки делают намерения кода прозрачными и облегчают поддержку.

📖 Подробнее: https://milanjovanovic.tech/blog/functional-error-handling-in-dotnet-with-the-result-pattern

#dotnet #cleanCode #architecture
⚙️ 3 способа определить Middleware в ASP.NET Core

Middleware - это компоненты, которые добавляют дополнительную логику до или после обработки HTTP-запроса.

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

🔧 В ASP.NET Core уже встроено множество middleware (Static Files, Routing, Authentication и др.),
но вы можете создавать и свои собственные.

Вот три основных способа это сделать:
- Request Delegates - определяете логику прямо в app.Use(...)
- Convention-based - создаёте класс с методом Invoke или InvokeAsync
- Factory-based - используете фабрику с внедрением зависимостей (DI)

🧠 Подробный разбор и примеры кода - в статье


#dotnet #aspnetcore #backend #middleware #csharp
🔥 EF Core 10 принес нормальные JOIN'ы в LINQ

Больше не нужно вспоминать, как извращаться с GroupJoin + DefaultIfEmpty, чтобы сделать обычный LEFT JOIN.
Теперь есть прямые методы:

LeftJoin
RightJoin

И они делают ровно то, что ты пишешь:
«Оставь все из левой таблицы и подтяни правые записи, если есть совпадения».

Плюсы
- Читаемость выше
- Код короче и очевиднее
- Транслируется в тот же SQL, что и раньше, но без боли

Примерно так LINQ наконец становится ближе к привычному SQL-пониманию разработчика: пишешь join — получаешь join, без магии и обходных путей.

Подробнее про LeftJoin и RightJoin в EF Core 10


#dotnet #efcore #csharp #linq #backend #devtools