csharp_ready | Unsorted

Telegram-канал csharp_ready - C# Ready | Unity

9818

Авторский канал по разработке на C# и Unity. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it РКН: https://clck.ru/3SBaT3 Реклама на бирже: https://telega.in/c/csharp_ready

Subscribe to a channel

C# Ready | Unity

Эффективная отмена операций с CancellationToken!

Часто нужно прерывать долгие операции по таймауту или по внешнему сигналу — как сделать это просто и гибко?

Сначала создаём источник с таймаутом:

var ctsTimeout = new CancellationTokenSource();
ctsTimeout.CancelAfter(TimeSpan.FromSeconds(5));
var timeoutToken = ctsTimeout.Token;


Далее связываем таймаутный токен с внешним и передаём в асинхронный метод:
var ctsExternal = new CancellationTokenSource();
using var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(
timeoutToken, ctsExternal.Token);
await SomeLongOperationAsync(linkedCts.Token);


🔥 Главное — комбинируйте таймауты и внешние токены для гибкой и надёжной отмены операций.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

Как работать с многострочными строками без «+» и «\n»?

При вставке длинных SQL, JSON или других текстовых фрагментов код засоряется экранированием и конкатенациями, из-за чего теряется читаемость и становится сложнее вносить правки.

До C# 11 приходилось писать так:

var sql = "SELECT Id, Name\n" +
"FROM Users\n" +
"WHERE Name LIKE '%Иван%'";


С C# 11 можно использовать raw-строки:
var sql = """
SELECT Id, Name
FROM Users
WHERE Name LIKE '%Иван%'
""";


🔥 Это позволяет вставлять SQL, JSON, XML и любые другие большие тексты без экранирования и конкатенаций — код чище и понятнее.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

Лайфхак для target-typed new!

С C# 9 вы можете упростить создание объектов, позволяя компилятору выводить тип из контекста:

List<string> names = new() { "Alice", "Bob", "Charlie" };
Dictionary<int, string> map = new()
{
[1] = "One",
[2] = "Two"
};


В этом блоке мы создаём коллекции: список строк и словарь, при этом тип объектов не дублируется в правой части:
void PrintPerson(Person p) => Console.WriteLine(p.Name);

PrintPerson(new("Иван"));


Здесь показывается передача нового объекта в метод. Компилятор понимает, что new("Иван") создаёт Person:
class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}


🔥 Определение класса остаётся обычным — конструктор сохраняет имя, а дальше вы можете использовать new("…") там, где ожидается Person.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

👩‍💻 Разбираем кортежи и деконструкции!

В этой шпаргалке — разбор кортежей и деконструкции в C#: как легко группировать данные без создания классов, обращаться к элементам по имени и распаковывать значения в переменные. Они упрощают работу с данными, делая код выразительным и лаконичным.

➡️ C# Ready | #шпора

Читать полностью…

C# Ready | Unity

Форматирование кода и единый стиль с dotnet format и EditorConfig!

Узнаем, как настроить единый стиль кодирования в проекте и автоматически форматировать всё одним инструментом — без лишних правок вручную.

Для начала создадим файл настроек стиля в корне проекта:

# .editorconfig
root = true

[*.cs]
indent_style = space
indent_size = 4
insert_final_newline = true
dotnet_sort_system_directives_first = true
csharp_new_line_before_open_brace = all


Теперь установим глобально или в проекте CLI-инструмент dotnet-format (если ещё не установлен):
dotnet tool install -g dotnet-format


Перейдём в папку решения и запустим форматирование:
cd MySolution
dotnet format


Пример вывода в консоли:
Formatting code in workspace 'MySolution.sln'...
Applying C# conventions...
Formatted document 'Program.cs'
Formatted document 'Controllers/HomeController.cs'
Formatting completed in 1.23 sec


🔥 Так что, dotnet format применяет правила из .editorconfig ко всему решению — экономит часы на ручных правках и гарантирует единый стиль у всей команды

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

👩‍💻 Мгновенное кэширование вычислений при помощи MemoryCache!

Храня результат тяжёлой функции в памяти, приложение отвечает мгновенно при повторных запросах, снижая нагрузку и ускоряя ответ без лишних вычислений.

В этой задаче:

• Придаёт скорости повторяющимся операциям в консоли на каждом запуске;

• Избегает ненужных пауз в работе программы автоматически;

• Контролирует время жизни данных без ручных действий.


MemoryCache — простой способ бесшовно ускорить приложение и значительно снизить нагрузку на вычисления.

➡️ C# Ready | #задача

Читать полностью…

C# Ready | Unity

👩‍💻 Разбираем readonly struct — как запретить изменения без лишних затрат?

Этот тип фиксирует все значения на этапе создания и исключает любые дальнейшие изменения.

Что важно знать:

• Нельзя менять поля;

• Нет скрытых действий;

• Меньше ошибок в коде.


Используется там, где нужно гарантировать стабильность значений без усложнения архитектуры.

➡ C# Ready | #гайд

Читать полностью…

C# Ready | Unity

👩‍💻 Console вывод без границ!

Освой ключевые методы для текстовых интерфейсов. Пиши ярко, читай гибко, управляй курсором и цветами как настоящий профи в C# приложениях.

➡️ C# Ready | #шпора

Читать полностью…

C# Ready | Unity

👩‍💻 Мгновенный аплоад в Google Drive!

С помощью пары методов перенесите любой файл на диск, получив мгновенную ссылку для удобного просмотра.

Что важно знать:

• Файл доступа рядом;

• Доступ только нужный;

• Большие файлы делим.


Автоматизируйте рутину и делитесь ссылками моментально, экономя время коллег и клиентов при повторных операциях загрузки.

➡️ C# Ready | #задача

Читать полностью…

C# Ready | Unity

📱 Async/await против корутин в Unity!

Кратко сравниваем задачи C# и корутины Unity, показывая, где каждая техника эффективнее в реальных сценариях.

Что важно знать:

• Ошибки ловятся сразу;

•
Отмена делается просто;

•
Изображение остаётся плавным.


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

➡️ C# Ready | #unity

Читать полностью…

C# Ready | Unity

👩‍💻 Кортежи без классов и аллокаций!

В прошлый раз говорили про деконструкцию и производительность. ValueTuple хорошо ложится в методы, паттерны и цепочки

Что важно знать:

• Упрощает возврат значений;

•
Работает с LINQ;

•
Имеет имена полей.


Это помогает возвращать сразу несколько значений — без классов, аллокаций и Item1.

➡ C# Ready | #гайд

Читать полностью…

C# Ready | Unity

Поиск текста во всех файлах папки!

Нужно найти слово или строку в десятках файлов? Например, проверить, где используется "connectionString" в .cs, .json или других файлах.

Укажем путь к папке и ключевое слово:

string folderPath = @"C:\Projects\Config";
string searchTerm = "connectionString";


Теперь пробегаем все файлы и ищем совпадения:
foreach (var file in Directory.GetFiles(folderPath, "*.*", SearchOption.AllDirectories))
{
string content = File.ReadAllText(file);
if (content.Contains(searchTerm, StringComparison.OrdinalIgnoreCase))
{
Console.WriteLine($"Найдено в: {file}");
}}


🔥 Работает с любыми типами файлов — от .cs и .json до .txt. Можно адаптировать под поиск по маске (*.log) или включить регулярные выражения.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

📱 Разбираем DrawMeshInstanced — быстрый рендер тысяч одинаковых объектов!

Он позволяет отрисовать до 1023 копии меша за один вызов без лишних объектов и Update'ов.

Что важно знать:

• Один вызов отрисовывает сразу сотни копий меша;

• Не создаёт объектов и не тратит ресурсы CPU;

• Позволяет задавать цвет, масштаб и позицию каждой копии.


Идеально для метели, толп, листвы и эффектов.

➡️ C# Ready | #unity

Читать полностью…

C# Ready | Unity

👩‍💻 Сегодня создаем QR-код для подключения к Wi-Fi без ввода пароля!

Готовим картинку, которая подключит к сети без ввода пароля.

Что важно знать:

• Строка Wi-Fi формируется специальным генератором из библиотеки;

• QR-код сохраняется как обычное изображение в формате PNG;

• Работает на большинстве телефонов без дополнительных приложений.


Удобно, просто, пригодится дома или в офисе.

➡️ C# Ready | #задача

Читать полностью…

C# Ready | Unity

👩‍💻 Удобная параллельность с TPL

Библиотека упрощает управление параллельными операциями, автоматизируя планирование и обработку ошибок.

Что важно знать:

• Задачи выполняются одновременно без сложной настройки потоков;

•
Можно легко отменять задачи и обрабатывать возникающие ошибки;

•
Работа равномерно распределяется по всем доступным ядрам процессора.


Получаете простой, быстрый и надёжный параллельный код.

➡ C# Ready | #гайд

Читать полностью…

C# Ready | Unity

👩‍💻 Погружаемся в мир глобализации с CultureInfo!

В этой шпаргалке вы узнаете, как грамотно управлять культурными настройками приложения: менять формат дат и чисел под привычки пользователя, использовать инвариантные форматы для надёжной сериализации, обращаться к кешированным объектам по коду языка и на лету адаптировать шаблоны вывода

➡️ C# Ready | #шпора

Читать полностью…

C# Ready | Unity

👩‍💻 Когда консоль превращается в игровое поле!

В простом окне терминала рождается динамика стратегии — всего девять клеток, но достаточно, чтобы почувствовать азарт и победу в чистом виде.

В этой задаче:

• Показывает, как из обычного ввода сделать живую механику;

• Учит коду реагировать на игрока, как на событие;

• Демонстрирует, что даже консоль может быть интерактивной.


Игра заканчивается быстро, но ощущение победы остаётся дольше, чем кажется.

➡️ C# Ready | #задача

Читать полностью…

C# Ready | Unity

📱 Input System: одно действие — любое устройство!

Меняя схему управления один раз, ты получаешь плавный переход между клавиатурой, геймпадом и любым новым контроллером без лишних правок в коде.

В этом гайде:

• Экономим время на настройку разных кнопок сразу;

•
Упрощаем добавление новых контроллеров без переработки логики;

• Делаем игру доступной широкому числу игроков мгновенно.


Попробуй новую систему ввода, и твой проект сразу станет гибче, чище и дружелюбнее к игрокам.

➡️ C# Ready | #unity

Читать полностью…

C# Ready | Unity

👩‍💻 ASCII‑арт в консоли: ретро‑магия символов

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

В этой задаче:

• Добавить глубину и стиль консольной графике символами;

• Легко менять палитры символов под любой визуальный эффект;

• Получать ASCII‑арт одной командой без сложных параметров.


Запусти прямо сейчас в своём терминале и окунись в атмосферу ретро‑графики без усилий одной командой.

➡️ C# Ready | #задача

Читать полностью…

C# Ready | Unity

👩‍💻 Мгновенный DNS-контроль!

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

➡️ C# Ready | #шпора

Читать полностью…

C# Ready | Unity

💅 The Complete Tutorial — базовый курс C# в виде коротких статей!

Простой, линейный курс: переменные, классы, коллекции, LINQ, файлы, XML, регулярки, рефлексия. Читается быстро, есть переводы (в т.ч. русский) и PDF-версия.

📌 Оставляю ссылочку: csharp.net-tutorials

➡ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

ТОП 3 канала для тех, кто увлекается хакингом и кибербезопасностью

Этичный Хакер — крупнейший в СНГ канал по информационной безопасности. OSINT, анонимность, пентест, социальная инженерия.

Лаборатория Хакера — авторский канал от специалиста по ИБ. Новости даркнета, сетевая разведка, обзоры инструментов с github, полезные подборки.

Mr.Robot — OSINT, анонимность, OWASP, Linux, даркнет.

Читать полностью…

C# Ready | Unity

Отслеживаем изменения в папке через FileSystemWatcher — мгновенный отклик без опроса!

Иногда нужно сразу реагировать, когда в каталоге появляется новый файл отчёта или изменяется конфигурация. Вместо бесконечных таймеров используем встроенный наблюдатель файловой системы.

Сначала задаём путь и настраиваем watcher: реагируем на создание и изменение только .txt-файлов, подписываемся на события Created и Changed:

using System.IO;

string path = @"C:\Watched";
using var watcher = new FileSystemWatcher(path, "*.txt")
{
NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite,
IncludeSubdirectories = false,
// или true — если нужны подпапки
EnableRaisingEvents = true
// запускаем слежение
};

watcher.Created += OnChanged;
watcher.Changed += OnChanged;


Обработчик получает данные об изменении и выводит краткую информацию:
static void OnChanged(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {e.ChangeType}: {e.FullPath}");
}


Чтобы консольное приложение не завершилось раньше времени, просто ждём клавишу:
Console.WriteLine($"👀 Слежение за {path} запущено. Нажмите Enter для выхода…");
Console.ReadLine();


🔥 FileSystemWatcher избавляет от циклов опроса: оперативно, без лишних ресурсов и под любые типы файлов.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

Параллельная обработка коллекции через Parallel.ForEach!

Когда нужно быстро выполнить CPU-интенсивную работу над большим набором данных, можно распараллелить обработку без сложной ручной работы с потоками:

// Исходная коллекция—скажем, список чисел
var numbers = new int[1_000_000];
new Random().NextBytes(new Span<byte>(new byte[0])); // просто для примера
for (int i = 0; i < numbers.Length; i++)
numbers[i] = i;


Вызовем Parallel.ForEach, соберём результаты в потокобезопасную коллекцию и зададим максимальное число параллельных задач:
var results = new ConcurrentBag<int>();
var options = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount };

Parallel.ForEach(numbers, options, number =>
{
// эмуляция тяжёлой работы
int squared = number * number;
results.Add(squared);
});


ConcurrentBag<T> гарантирует, что в него можно безопасно записывать из разных потоков без блокировок:
Console.WriteLine($"Обработано элементов: {results.Count}");
Console.WriteLine($"Первый результат: {results.Min()} | Последний: {results.Max()}");


🔥 Совет: поэкспериментируйте с MaxDegreeOfParallelism — на некоторых задачах меньшее число потоков даёт лучшее быстродействие за счёт меньшего оверхеда переключений.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

ValueTask vs Task — когда можно обойтись без лишних аллокаций!

Иногда асинхронный метод чаще всего завершается синхронно, а возвращая Task, мы платим за каждую аллокацию объекта-представителя:

// «До»: всегда возвращаем Task, даже если результат готов сразу
public async Task<int> GetCountAsync()
{
if (cache.TryGetValue("count", out var value))
return value;
var fresh = await LoadCountFromDbAsync();
cache["count"] = fresh;
return fresh;
}


Если кэш почти всегда заполнен, каждый вызов создаёт лишний Task-объект:
// «После»: возвращаем ValueTask при готовом результате
public ValueTask<int> GetCountAsync()
{
if (cache.TryGetValue("count", out var value))
return new ValueTask<int>(value); // без аллокации state-machine
return new ValueTask<int>(LoadCountFromDbAsync());
}


При cache hit мы сразу упаковываем значение в ValueTask<int>, не создавая асинхронной машины состояний.

При «промахе» возвращаем ValueTask, обёрнутый вокруг реального Task.

🔥 Использование ValueTask там, где результат часто готов сразу, сокращает количество выделений в куче и снижает нагрузку сборщика мусора.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

👩‍💻 Как запускать действия по времени?

Если нужно, чтобы что-то происходило регулярно — этот класс справится. Работает стабильно, не грузит систему и подходит даже тем, кто не дружит с потоками.

➡️ C# Ready | #шпора

Читать полностью…

C# Ready | Unity

Копируем только нужные файлы — быстро и удобно!

Нужно забрать только .jpg, .csv или любые другие файлы из папки? Не перебираем вручную — всё делаем в пару строк на C#.

Указываем директории и фильтр по расширению:

string sourceDir = @"C:\Data\Images";
string destDir = @"C:\Backup\Images";
string extension = ".jpg";


Теперь находим и копируем только нужные файлы:
foreach (var file in Directory.GetFiles(sourceDir))
{
if (Path.GetExtension(file).Equals(extension, StringComparison.OrdinalIgnoreCase))
{
var destFile = Path.Combine(destDir, Path.GetFileName(file));
File.Copy(file, destFile, overwrite: true);
}
}


🔥 Получаем копию всех .jpg (или любых других) из каталога — идеально для бэкапа, фильтрации или миграции данных.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

👩‍💻 Stopwatch — простой и точный способ измерить производительность любого участка кода в .NET

Он помогает отследить длительность операций с миллисекундной точностью, запускать и перезапускать замеры, профилировать и оптимизировать выполнение без лишнего шума.

➡️ C# Ready | #шпора

Читать полностью…

C# Ready | Unity

Упаковываем папку в ZIP одним методом — быстро и надёжно!

Иногда нужно отправить отчёты коллегам или сохранить бэкап: идеальный вариант — запаковать директорию одним вызовом.

Сначала подключим нужное пространство имён и зададим исходную папку и путь к будущему архиву:

using System.IO.Compression;

string sourceDir = @"C:\Reports";
string zipPath = @"C:\Archives\Reports_2025-09-28.zip";


Теперь упакуем каталог: с минимальным размером и без включения корневой директории в архив:
ZipFile.CreateFromDirectory(
sourceDir,
zipPath,
CompressionLevel.SmallestSize,
includeBaseDirectory: false);


После выполнения архивация будет завершена, и можно, например, вывести путь:
Console.WriteLine($"📦 Архив создан: {zipPath}");


🔥 Один метод — и вся папка в архиве: без внешних утилит, CLI или сторонних пакетов.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

Оцени 7 причин пройти бесплатный интенсив по Frontend-разработке:

1. Ты с нуля сделаешь фронтенд-проект;
2. Сверстаешь веб-сайт на HTML + CSS;
3. Оживишь страницу с помощью JavaScript;
4. Получишь советы по доработке от куратора;
5. Зальёшь рабочий сайт в интернет;
6. Поймёшь, как упростить работу с помощью ChatGPT и Giga;
7. Начнёшь зарабатывать на вёрстке в течение месяца 🔥

А главное, ты проведёшь 7 дней в приятной компании Fullstack-разработчика с 12-летним стажем – Романа Чернова.

⏳ 25 сентября закроется регистрация на текущий поток.

👉 Забирай курс — и начни зарабатывать на вёрстке от 100 000₽ в месяц

🔥 С нас обучение, практика и помощь с выходом на фриланс или собеседованием.

Читать полностью…
Subscribe to a channel