ru
Feedback
C# (C Sharp) programming

C# (C Sharp) programming

Открыть в Telegram

📈 Аналитический обзор Telegram-канала C# (C Sharp) programming

Канал C# (C Sharp) programming (@csharp_ci) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 18 311 подписчиков, занимая 7 339 место в категории Технологии и приложения и 36 883 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 18 311 подписчиков.

Согласно последним данным от 14 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -10, а за последние 24 часа — -7, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 18.97%. В первые 24 часа после публикации контент обычно набирает 7.27% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 3 472 просмотров. В течение первых суток публикация набирает 1 331 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 0.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как .net, api, логика, архитектура, string.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ

Благодаря высокой частоте обновлений (последние данные получены 15 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

18 311
Подписчики
-724 часа
-27 дней
-1030 день
Архив постов
🖥 Годное видео о рефакторинге кода C# В частности, в ролике идёт речь о таких вещах как: ⏩Переименование переменных и методо
+2
🖥 Годное видео о рефакторинге кода C# В частности, в ролике идёт речь о таких вещах как: ⏩Переименование переменных и методов — Улучшает ясность и понятность кода, делая его самодокументируемым. Пример: система управления контентом, где переменные и методы не дают ясного понимания их назначения.Извлечение интерфейса — Разделение определения операции от ее реализации, улучшение модульности, упрощение тестирования и увеличение гибкости кода. Пример: система обработки платежей, где класс реализует методы для каждого типа платежа, но добавление новых способов обработки может быть проблематичным.Упрощение условных выражений — Улучшение читаемости и поддержки кода, избегая сложных и больших условных выражений. Пример: система управления заказами, где много уровней вложенности и проверок, что затрудняет чтение и понимание кода. 📎 Кликабельный план ролика 📎 Youtube @csharp_ci

🦾Хардкорный тест по языку С🦾 📌Пройдите полный тест из 20 вопросов на сайте и проверьте, насколько вы готовы к обучению на
🦾Хардкорный тест по языку С🦾 📌Пройдите полный тест из 20 вопросов на сайте и проверьте, насколько вы готовы к обучению на углубленном курсе - «Программист С» от OTUS. Сможете сдать - пройдете на курс с финальной скидкой 10% по промокоду devc10 ⏰ Время прохождения теста ограничено 30 минут 👉ПРОЙТИ ТЕСТ

🖥Что такое NullReferenceException, и как исправить? Итак кейс: выполняется некоторый код, выбрасывается исключение NullRefer
🖥Что такое NullReferenceException, и как исправить? Итак кейс: выполняется некоторый код, выбрасывается исключение NullReferenceException со следующим сообщением:
Object reference not set to an instance of an object (В экземпляре объекта не задана ссылка на объект)
Что же это значит, и как исправить код? ⏩В двух словах Вы пытаетесь воспользоваться чем-то, что равно null (или Nothing в VB.NET). Это означает, что либо вы присвоили это значение, либо вы ничего не присваивали. Как и любое другое значение, null может передаваться от объекта к объекту, от метода к методу. Если нечто равно null в методе "А", вполне может быть, что метод "В" передал это значение в метод "А". ⏩Более подробно Если среда выполнения выбрасывает NullReferenceException, то это всегда означает: вы пытаетесь воспользоваться ссылкой. И эта ссылка не инициализирована (или уже не инициализирована). Это означает, что ссылка равна null, а вы не сможете вызвать методы через ссылку, равную null, как тут:
string foo = null;
foo.ToUpper();
Этот код выбросит исключение NullReferenceException на 2 строке, потому что вы не можете вызвать метод ToUpper() у ссылки на string, равной null. ⏩Отладка Как определить источник ошибки? Общие рекомендации: поставьте точки останова в ключевых местах, изучите значения переменных, расположив курсор мыши над переменной, либо открыв панели для отладки: Watch, Locals, Autos. Если вы хотите определить место, где значение ссылки устанавливается (или нет), нажмите ПКМ на её имени и выберите "Find All References". Затем вы можете поставить точки останова на каждой найденной строке и запустить приложение в режиме отладки. Каждый раз, когда отладчик остановится на точке останова, вы можете удостовериться, что значение верное. Так вы придёте к месту, где значение ссылки не должно быть null, и определите, почему не присвоено верное значение. 📎 Очень подробное обсуждение этой проблемы с примерами @csharp_ci

erid: LjN8K3218 ❓Как С#-разработчику вырасти до уровня Senior в 2024? Изучить .NET Framework, Scrum-методики и многое другое
erid: LjN8K3218 ❓Как С#-разработчику вырасти до уровня Senior в 2024? Изучить .NET Framework, Scrum-методики и многое другое на онлайн-курсе «C# Developer. Professional» от OTUS. Программа идеально подходит для начинающих C#-разработчиков, которые хотят развиваться в серверной разработке, создании приложений и микросервисов. На курсе вас ждут: - живые вебинары с возможностью задать вопросы экспертам; - много практики и сильные проекты для портфолио; - поддержка профессионального комьюнити. 👉 Пройдите бесплатный тест прямо сейчас и узнайте, готовы ли вы сделать следующий шаг в карьере: https://otus.pw/SXyf/ Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🖥 Обработка ошибок с помощью IExceptionHandler в ASP.NET Core 8.0 Относительно недавно на свет появился ASP.NET Core 8.0, и
🖥 Обработка ошибок с помощью IExceptionHandler в ASP.NET Core 8.0 Относительно недавно на свет появился ASP.NET Core 8.0, и теперь можно обрабатывать ошибки с помощью IExceptionHandler. А вот и полезная статья о том, как это делать. ⏩Вкратце о IExceptionHandler IExceptionHandler — это интерфейс, который предоставляет разработчику обратный вызов для обработки известных исключений в центральном расположении. IExceptionHandler реализации регистрируются путем вызова IServiceCollection.AddExceptionHandler. Время существования экземпляра IExceptionHandler — одноэлементное. Можно добавить несколько реализаций, и они вызываются в порядке регистрации. Если обработчик исключений обрабатывает запрос, он может вернуться true к остановке обработки. Если исключение не обрабатывается обработчиком исключений, то элемент управления возвращается к поведению по умолчанию и параметрам из по промежуточного слоя. Для обработки и необработанных исключений создаются различные метрики и журналы. 📎 Статья 📎 Доки от Windows, как обрабатывать ошибки @csharp_ci

Сможете разгадать тайны Гиперкуба? Проявите смекалку и примените ИТ-скиллы на Tinkoff CTF — соревновании по спортивному хакин
Сможете разгадать тайны Гиперкуба? Проявите смекалку и примените ИТ-скиллы на Tinkoff CTF — соревновании по спортивному хакингу. Победителям — призы до 420 000 ₽. Вот как все устроено: — Выберите лигу: опытных или новых игроков. Задания рассчитаны на ИТ-специалистов уровня мидл и выше. Если играете впервые, можете потренироваться с демоверсией заданий. — Соревнуйтесь в одиночку или командой до трех человек. Организаторы помогут найти команду, если нет своей. — Играйте онлайн или офлайн — в одном из 16 городов России, Беларуси и Казахстана. — Используйте время на решение заданий или общение с участниками — у вас будет 36 часов. Задания будут интересны разработчикам, QA- и SRE-инженерам, аналитикам и другим опытным ИТ-специалистам. Зарегистрируйтесь до 19 апреля и пробуйте свои силы erid:2VtzqwMPLoX Реклама. АО "Тинькофф Банк", ИНН 7710140679, лицензия ЦБ РФ № 2673

🖥 Как "схлопнуть" вызовы, чтобы вызываемый код не "захлебнулся"? ▶️Итак, сценарий такой. В коде генерируются некие обновления, которые затем обрабатываются неким методом. Обновления могут генерироваться слишком часто, плюс метод обработки может тормозить, в результате обновления не успевают обрабатываться, накапливаются, обработчик потом делает лишнюю работу. Хотелось бы как-то "накопить" обновления, пока обработчик занят. Причём, сами данные для обновления уже "накапливаются", об этом заботиться не нужно, нужно только разрулить "накопление" запросов к обработчику, чтобы когда обработчик освободиться обрабатывать не все накопившиеся запросы на обновление по отдельности, а за один раз сразу весь пакет "обновлений" обработать. Вот так происходит сейчас:
async Task UpdateFoo()
{   ...
    await SaveAsync();
}

async Task UpdateBar()
{   ...
    await SaveAsync();
}

async Task UpdateBaz()
{   ...
    await SaveAsync();
}

async Task SaveAsync()
{   // здесь нужно сделать так, 
    // чтобы одновременно обрабатывался только 1 запрос
    // по окончании которого проверялось бы не было ли ещё запросов
    // и если были, то обновление запускалось бы ещё 1 раз (сразу за всё "накопленное")
    // и так пока есть обновления по окончании очередной обработки
}
Как это можно нормально написать? Для того, чтобы зайти один раз — понятно, SemaphoreSlim, видимо (с WaitAsync). А вот остальное как лучше сделать? ▶️Вариант решения. ⏩Общий пример, берём System.Threading.Channels.Channel<T>:
private readonly Channel<T> _channel = Channel<T>.CreateUnbounded();
⏩Пишем метод разрегребания:
private Task _workerTask;

private async Task WorkerAsync()
{
    ChannelReader<T> reader = _channel.Reader;
    List<T> list = new();

    // ждём здесь, если в канале пусто
    while (await reader.WaitToReadAsync())
    {
        // забираем всё что есть
        // ну или можно счётчиком ограничить максимальное количество выгребаемых данных за раз
        while (reader.TryRead(out T data))
        {
            list.Add(data);
        }
        // пачка собрана, погнали. это можно в try-catch завернуть, чтобы воркер не падал
        await UseAsync(list);
        list.Clear();
    }
}
⏩Стартуем воркер:
_workerTask = WorkerAsync();
Чтобы закинуть в канал:
_channel.Writer.TryWrite(x);
⏩Чтобы закрыть канал (насовсем), и чтобы метод WorkerAsync завершился, нужно вызвать:
_channel.Writer.Complete();
await _workerTask;
Вот и все дела 🙃 @csharp_ci

Ozon Tech приглашает на C#-митап 29 марта | 19:00 Офлайн в Москве | Онлайн Какие темы в программе? #️⃣ ThreadPool, выявление
Ozon Tech приглашает на C#-митап 29 марта | 19:00 Офлайн в Москве | Онлайн Какие темы в программе? #️⃣ ThreadPool, выявление проблем при работе на высоких нагрузках, Алексей Калдузов, руководитель группы разработки C#-платформы. #️⃣ Причины медленной работы БД и способы оптимизации на примере PostgreSQL, Дмитрий Орлов, эксперт разработки, команда Metazon Inventory. #️⃣ Решение проблем шардированных БД, Артём Барабошин, старший C#-разработчик. А после докладов — уютный вечер за разговорами🍕 Зарегистрируйтесь, чтобы получить офлайн-билет или присоединиться к трансляции. erid: LjN8Jtu2A Реклама. Рекламодатель ООО «Озон Технологии».

Что выведет на экран это код?
Anonymous voting

#ПятничныйКвиз
#ПятничныйКвиз

🖥 Ловите полезные ссылки для изучения асинхронности в C# Асинхронность вызывает большие проблемы у многих, но выход есть — в
🖥 Ловите полезные ссылки для изучения асинхронности в C# Асинхронность вызывает большие проблемы у многих, но выход есть — вот: *️⃣ Во-первых, стоит прочитать весь блок статей на MSDN *️⃣ Первый гигант async/await — Stephen Cleary. Вводная статья *️⃣ Статья об устройстве async/await под капотом. Не обязательно заучивать всю машину состояний под await, но тут как с блоком итератора yield - код пишется, а руки трясутся. *️⃣ На этом этапе может начаться каша в голове и встреча с SynchronizationContext. Начать можно с этой статьи на MSDN. Но если она покажется душной, переходите к пункту 5. *️⃣ Второй гигант, и тоже Stephen. Я советую перечитать все статьи обоих, что можно найти. Но продолжая тему контекста синхронизации — эта статья крайне важна для тех, кто тренируется в консольных приложениях. Вопрос об асинхронности/многопоточности уходит после нее. И небольшой, но классный ответ на StackOverflow о TaskScheduler. *️⃣ Но если вопрос все же не ушел — There is no thread. Также советую загуглить словосочетание из этой статьи — naturally-asynchronous operations. *️⃣ Для закрепления пунктов 4,5,6 можно почитать о Task.Run (и комплексных случаях использования многопоточности и асинхронности). Внутри этого блока статей много полезных ссылок и на другие материалы. *️⃣ Лучшие практики от Cleary. Кстати, у него есть книга по асинхронности, можно ознакомиться при желании. *️⃣ Обработка исключений. @csharp_ci

🖥 Задачка с собеседования от Сбера: Вставьте код функции Mutate (без использования ключевого слова unsafe), чтобы на консоль вывелось «404». Сигнатуру функции не менять, замыкания не ловить

const string constStr = "000";

Mutate(constStr);

var nonConst = "000";

Console.WriteLine(nonConst);



void Mutate(string str)

{

    // write your code here

}
Вот пример моего решения, которое полностью устроило лида, который меня собесил

void Mutate(string str)
{
    GCHandle handle = GCHandle.Alloc(str, GCHandleType.Pinned);

    IntPtr pointer = handle.AddrOfPinnedObject();

    Marshal.WriteByte(pointer, 0, (byte)'4');
    Marshal.WriteByte(pointer, 4, (byte)'4');

    handle.Free();
}
Весь смысл кроется в том, как работают строки в .net (интернирование), что такое pinned object и как работать с unmanaged кодом. Идея интернирования строк состоит в том, чтобы хранить в памяти только один экземпляр типа String для идентичных строк. При старте нашего приложения виртуальная машина создаёт внутреннюю хэш-таблицу, которая называется таблицей интернирования (иногда можно встретить название String Pool). Pinned Object Heap (POH, Куча Закрепленных Объектов). В отличие от других видов кучи, эта доступна разработчикам явно (что не характерно для сборщика мусора). @csharp_ci

🖥 Humanizer C# Humanizer — бесплатная .NET-библиотека с открытым исходным кодом, которая предлагает набор методов для манипулирования строками, числами, датами, временем, временными интервалами, цифрами и величинами в удобном для человеческого восприятия виде. Работа со временем и датой — одна из самых распространенных и муторных задач в любом приложении. Пользователи ожидают увидеть дату и время в формате, который будет легко восприниматься и соответствовать контексту. 🔵Форматирование DateTime в удобочитаемый вид Один из самых простых способов гуманизировать объект DateTime — использовать метод расширения Humanize, который возвращает время и дату на естественном языке. Например:

using Humanizer;

DateTime now = DateTime.Now;
DateTime yesterday = now.AddDays(-1);
DateTime tomorrow = now.AddDays(1);
DateTime nextWeek = now.AddDays(7);

Console.WriteLine(now.Humanize()); // сейчас
Console.WriteLine(yesterday.Humanize()); // вчера
Console.WriteLine(tomorrow.Humanize()); // через 23 часа
Console.WriteLine(nextWeek.Humanize()); // через 6 дней
Как видите, метод Humanize возвращает строку, которая легко воспринимается и зависит от текущих времени и даты. Он также учитывает различные временные отношения, такие как сегодня, вчера, завтра, а также будущие или прошлые даты. 🔵Еще один способ гуманизации объекта DateTime — использовать метод расширения Humanize с булевым параметром, указывающим, отображать относительное время или нет. Относительное время — это строка, которая представляет, сколько времени прошло с или пройдет до конкретного момента. Например:

using Humanizer;

DateTime anHourAgo = DateTime.Now.AddHours(-1);
DateTime anHourLater = DateTime.Now.AddHours(1);

Console.WriteLine(anHourAgo.Humanize()); // час назад
Console.WriteLine(anHourLater.Humanize()); // через 59 минут
🔵Как-то вот так можно использовать Humanizer для управления датой и временем. 📎 Подробнее можно почитать тут @csharp_ci

💼 Если ваши сотрудники на удалёнке, так ещё и в разных часовых поясах, то вам явно тяжело выстроить рабочий процесс и сохран
💼 Если ваши сотрудники на удалёнке, так ещё и в разных часовых поясах, то вам явно тяжело выстроить рабочий процесс и сохранить максимум эффективности. Вам может помочь виртуальное пространство от Яндекс 360. На вебинаре 20 марта в 11:00 по Москве они как раз расскажут, как лучше управлять командой в такой ситуации! Зарегистрироваться можно здесь 👈

🖥 Как распарсить HTML в .NET? 🔜 Итак, реальный кейс: Необходимо извлечь все URL из атрибутов href тегов a в HTML странице.
🖥 Как распарсить HTML в .NET? 🔜 Итак, реальный кейс: Необходимо извлечь все URL из атрибутов href тегов a в HTML странице. Можно попробовать воспользоваться регулярными выражениями:
Uri uri = new Uri("http://google.com/search?q=test");
Regex reHref = new Regex(@"<a[^>]+href=""([^""]+)""[^>]+>");
string html = new WebClient().DownloadString(uri);
foreach (Match match in reHref.Matches(html))
    Console.WriteLine(match.Groups[1].ToString());
Но возникает множество потенциальных проблем: — Как отфильтровать только специфические ссылки, например, по CSS классу? — Что будет, если кавычки у атрибута другие? — Что будет, если вокруг знака равенства пробелы? — Что будет, если кусок страницы закомментирован? — Что будет, если попадётся кусок JavaScript? — И так далее. Регулярное выражение очень быстро становится нечитаемым. Какие есть другие варианты? 🔜 Для парсинга HTML используйте AngleSharp Проверенный игрок на поле парсеров. В отличие от CsQuery, написан с нуля вручную на C#. Также включает парсеры других языков. API построен на базе официальной спецификации по JavaScript HTML DOM. Изначально содержал в некоторых местах странности, непривычные для разработчиков на .NET (например, при обращении к неверному индексу в коллекции будет возвращён null, а не выброшено исключение), но разработчик в конце концов сдался и исправил самые жуткие костыли. Что-то ушло само, например, Microsoft BCL Portability Pack. Что-то осталось, например, пространства имён очень гранулярные, даже базовое использование библиотеки требует три using и т. п.), но в целом ничего критичного. Обработка HTML простая, к примеру вот:
IHtmlDocument angle = new HtmlParser().ParseDocument(html);
foreach (IElement element in angle.QuerySelectorAll("a"))
    Console.WriteLine(element.GetAttribute("href"));
📎 Читать подробнее @csharp_ci

Вариант для тех, кто ищет виртуальный сервер с хорошей веб-защитой — Aéza: – Виртуальные сервера до 6.0 ГГц на лучших процесс
Вариант для тех, кто ищет виртуальный сервер с хорошей веб-защитой — Aéza: – Виртуальные сервера до 6.0 ГГц на лучших процессорах; – Профессиональная фильтрация атак StormWall; – Круглосуточная поддержка; – Anycast фильтрация; – Низкие цены; – 15% кешбэка по ссылке. Бесконечно можно смотреть на три вещи: на огонь, воду и скидку от Aeza! Говорят: твоё от тебя не уйдет. А зачем ждать? Динозавры тоже ждали и остались в прошлом Используй 50% скидку и погнали в будущее! Кроме того, сейчас Aéza раздает личные бесплатные сервера, забираем тут. Регистрация, подписка, платежи не потребуются. Реклама. Индивидуальный предприниматель Лобанов Леонид Константинович. ИНН 781625705648 erid: LjN8KEr3S

Что выведет на экран это код?
Anonymous voting

#ПятничныйКвиз #карательныйсишарп
#ПятничныйКвиз #карательныйсишарп

🖥 Создание бесконечно повторяющегося метода в C# Итак задача: как создать бесконечно повторяющийся метод в C#, который работ
🖥 Создание бесконечно повторяющегося метода в C# Итак задача: как создать бесконечно повторяющийся метод в C#, который работает на протяжении работы приложения? Предположим, метод должен через определенное количество времени выводить какую-то информацию на экран; он должен работать вне зависимости от действий пользователя. ⏩Если в двух словах, то для этого можно использовать асинхронность. Итак, создаём:
private async Task RunLoopAsync(CancellationToken token)
{
    try
    {
        while (true)
        {
            // ... что-то сделать
            await Task.Delay(1000, token); // подождать одну секунду
        }
    }
    catch (OperationCanceledException)
    { } // сработала отмена, ничего не делать
}
⏩и вот так это можно использовать:
private CancellationTokenSource _cts;

private async void StartLoop()
{
    if (_cts != null)
        return;
    try
    {
        using (_cts = new CancellationTokenSource())
        {
            await RunLoopAsync(_cts.Token);
        }
    }
    catch (Exception ex)
    {
        // ... ex.Message
    }
    _cts = null;
}

private void StopLoop()
{
    _cts?.Cancel();
}
📎 Читать подробнее @csharp_ci

Смартфон за ваш ответ! Исследовательская компания OMI проводит опрос среди IT-специалистов. Пройдите по ссылке, ответьте на н
Смартфон за ваш ответ! Исследовательская компания OMI проводит опрос среди IT-специалистов. Пройдите по ссылке, ответьте на несколько вопросов и получите шанс выиграть последнюю модель передового смартфона! Примите участие в опросе прямо сейчас — это займет минимум времени.