Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🤝13🔥8❤1
В этой статье:
• Когда использовать асинхронность: IO-bound против CPU-bound операций• Как async/await компилятором превращается в машину состояний• Примеры Task, ValueTask, WhenAny и обработка исключений без магии🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍7🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
Блог про C# и .NET с упором на чистый и поддерживаемый код: практичные гайды, подборки сниппетов, разбор современных фич (C# 12, .NET 10, атрибуты, паттерны), плюс статьи для прокачки от уровня новичка до мидла.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥5👍4
Как упростить работу с индексами и подстроками?
Классический подход — вечные
Чем больше таких мест, тем больше “магических чисел” и арифметики над
С индексами (
Здесь
🔥 Итог: меньше
➡️ C# Ready | #совет
Классический подход — вечные
Substring и ручные вычисления длины. В итоге получаем выражения, которые трудно читать и легко сломать:var lastChar = input[input.Length - 1];
var withoutLast = input.Substring(0, input.Length - 1);
Чем больше таких мест, тем больше “магических чисел” и арифметики над
Length, особенно при работе с расширениями файлов, префиксами и хвостами строк.С индексами (
^) и диапазонами (..) в C# можно писать это намного компактнее и ближе к тому, как мы думаем о строке:var lastChar = input[^1]; // последний символ
var withoutLast = input[..^1]; // всё, кроме последнего
Здесь
^1 — “первый элемент с конца”, [..^1] — “с начала до элемента перед последним”. Для хвостов и расширений тоже получается читаемое правило: [^3..] — последние три символа, [..^4] — всё, кроме последних четырёх.Substring, меньше ручных Length - 1, код читается как работа с отрезками строки, а не как арифметика с индексами.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥8👍6
Прогресс-бар в консоли для долгих операций — наглядный прогресс без UI!
Когда операция выполняется несколько секунд (или минут), пустая консоль выглядит как зависшая. Проще сразу показывать прогресс — например, в виде текстового прогресс-бара.
Нам хватит стандартных пространств имён:
Сделаем простой пример: у нас есть «долгая» операция из 100 шагов. В цикле будем имитировать работу через
Вся магия в методе
Ключевой момент —
он возвращает курсор в начало текущей строки, поэтому новый вывод перезаписывает старую строку прогресса, а не переносит консоль вниз.
В итоге во время работы программы ты увидишь динамически меняющуюся строку:
и по завершении —
🔥 Главное — вынести отрисовку прогресса в отдельный метод и обновлять одну строку через
➡️ C# Ready | #практика
Когда операция выполняется несколько секунд (или минут), пустая консоль выглядит как зависшая. Проще сразу показывать прогресс — например, в виде текстового прогресс-бара.
Нам хватит стандартных пространств имён:
using System;
using System.Threading;
Сделаем простой пример: у нас есть «долгая» операция из 100 шагов. В цикле будем имитировать работу через
Thread.Sleep и обновлять строку прогресса:int total = 100;
for (int i = 0; i <= total; i++)
{
DrawProgressBar(i, total);
Thread.Sleep(50); // имитация долгой работы
}
Console.WriteLine();
Console.WriteLine("Готово!");
Вся магия в методе
DrawProgressBar: он считает процент, строит строку вида [#####-----] 50% и перерисовывает одну и ту же строку в консоли:static void DrawProgressBar(int current, int total)
{
int width = 30; // ширина прогресс-бара в символах
double progress = (double)current / total;
int filled = (int)(progress * width);
string bar = new string('#', filled) + new string('-', width - filled);
Console.Write($"\r[{bar}] {progress:P0}");
}
Ключевой момент —
\r в начале строки:он возвращает курсор в начало текущей строки, поэтому новый вывод перезаписывает старую строку прогресса, а не переносит консоль вниз.
В итоге во время работы программы ты увидишь динамически меняющуюся строку:
[###############---------------] 50%
и по завершении —
Готово!.\r, тогда консоль не превратится в простыню из сотен сообщений.Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤9🔥5😁2
Переведём сухие числа разницы во времени в живые фразы, чтобы «через час» и «три дня назад» звучали естественно и не требовали пересчёта.
В этой задаче узнаешь:
• Как почувствовать разницу между датами, а не числами;
• Где естественно сказать «назад», а где «через»;
• Почему короткая фраза о времени понятнее таймера.
Когда интерфейс говорит с человеком человеческим языком, время перестаёт быть абстракцией. Пусть твои даты звучат как живые истории, а не скучные отметки в протоколе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍8❤5🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
Сайт с огромной коллекцией задач по программированию, от самых простых до тех, что реально заставят подумать.
Учиться можно на абсолютно любом языке. Отличный способ подтянуть логику, научиться писать аккуратный код и подготовиться к собесам.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤7👍4
Как убрать 10 одинаковых using в каждом файле?
В проектах быстро появляется “шапка”, которая копируется из файла в файл:
В C# 10 можно вынести общие
🔥 Итог: файлы становятся чище, меньше копипасты, меньше “шума” в каждом классе. Главное правило — выноси в global только то, что реально используется повсеместно (иначе можно получить лишние конфликты имён и путаницу).
➡️ C# Ready | #совет
В проектах быстро появляется “шапка”, которая копируется из файла в файл:
System, Linq, коллекции, логирование, общие неймспейсы фреймворка. Полезного кода ещё нет, а сверху уже простыня.using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
// + ещё 5–10 строк...
В C# 10 можно вынести общие
using в один файл и сделать их глобальными — тогда они автоматически применяются ко всему проекту:// GlobalUsings.cs
global using System;
global using System.Linq;
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥11❤7😁2🤝1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍11🤝8