uk
Feedback
C# (C Sharp) programming

C# (C Sharp) programming

Відкрити в Telegram

По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ

Показати більше

📈 Аналітичний огляд Telegram-каналу C# (C Sharp) programming

Канал C# (C Sharp) programming (@csharp_ci) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 18 307 підписників, посідаючи 7 339 місце в категорії Технології та додатки та 36 883 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 18 307 підписників.

За останніми даними від 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 307
Підписники
-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-специалистов. Пройдите по ссылке, ответьте на несколько вопросов и получите шанс выиграть последнюю модель передового смартфона! Примите участие в опросе прямо сейчас — это займет минимум времени.