C# Ready | Unity
10.1K subscribers
1.2K photos
62 videos
550 links
Авторский канал по разработке на C# и Unity.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3SBaT3

Реклама на бирже: https://telega.in/c/csharp_ready
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
❤️ ShaderToy — шейдеры в браузере и море вдохновения!

Это платформа, где можно писать и запускать GLSL-шейдеры прямо в браузере: огромная библиотека работ сообщества, живые демки, код рядом с результатом, плюс удобный редактор для экспериментов со светом, шумами, пост-эффектами и процедурной графикой.

📌 Оставляю ссылочку: shadertoy.com

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥7👍4
👩‍💻 IDisposable без лишней магии!

В этой шпаргалке — наглядное объяснение того, как в .NET правильно освобождать ресурсы: чем отличается Dispose от финализации, как работает using, когда нужен await using и почему IAsyncDisposable важен для современного асинхронного кода.

➡️ C# Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1211👍3🤝1
📂 Напоминалка по REST API

На картинке — компактная шпаргалка про то, каким должен быть “правильный” REST: запросы без состояния, предсказуемые URL, безопасность через HTTPS, версионирование, аккуратная работа с коллекциями (фильтры и пагинация) и понятная логика взаимодействия клиента с сервером.

Сохрани, чтобы быстро сверяться при проектировании и ревью API

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍5🔥4
Как не писать if (x == null) throw ... вручную?

В C# мы постоянно защищаемся от null: в публичных методах, сервисах, хендлерах, контроллерах. И почти в каждом месте повторяется один и тот же шаблон:
if (options == null)
throw new ArgumentNullException(nameof(options));


Это работает, но:

• код раздувается от однотипных проверок,
• легко забыть nameof(...) или написать не то имя,
• “полезная” логика тонет в бойлерплейте.

В современных версиях .NET есть короткий и безопасный вариант:
ArgumentNullException.ThrowIfNull(options);


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

🔥 Итог: вместо ручного if (...) throw ... используй ArgumentNullException.ThrowIfNull(x) — меньше шума, меньше копипасты, проще читать метод с первого взгляда.

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍14🤝6🔥31
👍 Отличная статья — про инкрементные Source Generators: как ускорить генерацию и не грузить IDE лишним!

В этой статье:

• Разобраться, чем incremental отличается от классических генераторов
• Увидеть, как собирается пайплайн: провайдеры, трансформации
• Понять практические кейсы: генерация boilerplate, DSL-подходы

🔊 Продолжай читать на Habr!


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65🔥4😁1
Обрабатываем ошибки с try-catch-finally!

Сейчас научимся ловить ошибки во время выполнения программы с помощью конструкции try-catch. Это особенно полезно, когда пользователь может ввести некорректные данные — например, буквы вместо чисел.

Подключим нужные библиотеки — всё уже есть в стандартной библиотеке:
using System;


Допустим, мы хотим преобразовать строку в число. Если строка — не число, программа «упадёт»:
string input = "abc";
int number = Convert.ToInt32(input); // тут возникнет ошибка


Чтобы программа не завершалась с ошибкой, обернём этот код в try-catch. Если произойдёт исключение, оно будет поймано и обработано:
try {
string input = "abc";
int number = Convert.ToInt32(input);
Console.WriteLine($"Число: {number}");
}


Если строка не может быть преобразована в число, будет выброшено исключение типа FormatException.
catch (FormatException) {
Console.WriteLine("Ошибка: введена нечисловая строка.");
}


И наконец, добавим блок finally. Он выполняется всегда — даже если произошла ошибка.
finally {
Console.WriteLine("Завершено выполнение блока.");
}


🔥 Без try-catch программа завершилась бы аварийно. А с обработкой исключений — работает стабильно, даже при ошибочном вводе.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍137🔥4😁1
14👍10🔥6😁2
Почему async void почти всегда ошибка?

При работе с асинхронным кодом в C# многие по привычке пишут async void, не задумываясь о последствиях. На первый взгляд всё работает, но такие методы могут привести к трудноуловимым багам.

Разберёмся, в чём проблема и как правильно писать асинхронные методы.

Создадим метод с async void:
async void DoWorkAsync()
{
await Task.Delay(1000);
throw new Exception("Ошибка внутри async void");
}


Вызовем его:
DoWorkAsync();
Console.WriteLine("Метод вызван");


При запуске приложение завершится с ошибкой, и мы не сможем поймать исключение через try/catch.

Теперь перепишем метод правильно — с async Task:
async Task DoWorkAsync()
{
await Task.Delay(1000);
throw new Exception("Ошибка внутри async Task");
}


Вызовем его с обработкой ошибок:
try
{
await DoWorkAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}


Результат в консоли:
Ошибка внутри async Task


🔥 async void нельзя await и в нём невозможно корректно обработать исключения. Используй async Task, а async void оставляй только для обработчиков событий.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥7👍5
This media is not supported in your browser
VIEW IN TELEGRAM
☕️ Смотрите что нашел — Explainshell.

Вводишь любую команду в терминале, и он по частям объясняет, что делает каждая часть. Не просто man-ка, а понятный синтакс-анализ.

Особенно кайф для тех, кто работает в Linux/DevOps/CI среде и хочет разбираться, а не наугад копипастить из StackOverflow.

📌 Оставляю ссылочку: explainshell.com

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥85
👩‍💻 Буферы, которые не засоряют память!

ArrayPool особенно хорош в “горячем” коде, где буферы создаются сотни/тысячи раз: сериализация, парсинг, сетевые пакеты, кодирование строк.

В что важно знать:

Rent() может вернуть массив больше запрошенного;

Return() — всегда (лучше через try/finally);

После Return() массив использовать нельзя; для секретов — clearArray: true


Если у тебя много временных byte[]/char[] — ArrayPool<T> почти всегда даёт профит, но требует дисциплины.

➡️ C# Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥237👍5
📂 Шпаргалка по Core C# и .NET!

На картинке — компактный quick reference по базовым вещам в C#: примитивные типы и их размеры, работа с массивами, частые операции со строками, форматирование чисел и дат, основы регулярных выражений

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

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6🔥5
Как не писать Any() перед First()?

Частая привычка — сначала проверить коллекцию, а потом взять первый элемент:
if (items != null && items.Any())
{
var first = items.First();
// ...
}


Проблема в том, что это:

добавляет лишний шум в код,
нередко делает двойной проход по источнику (особенно если это IEnumerable, LINQ-запрос, поток данных),
усложняет чтение: полезная логика прячется за проверками.

Вместо связки Any() + First() обычно достаточно сразу использовать безопасный вариант:
var first = items.FirstOrDefault();
if (first is null) return; // или другой fallback


Если тебе нужно “взять элемент или вернуть дефолт”, это читается как правило и не заставляет выполнять одну и ту же работу дважды.

🔥 Итог: не проверяй Any() перед First() — чаще бери FirstOrDefault() (или SingleOrDefault() для “должен быть один”) и обработай null/default один раз в понятном месте.

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍104
😎 Отличная статья — как перестать вручную писать конструкторы и доверить это Source Generator’у.

В этой статье:

• Поймёшь, зачем генерация конструкторов снижает бойлерплейт и ошибки
• Увидишь, как атрибуты описывают зависимости и правила инъекции
• Разберёшь подключение генератора, ограничения, нюансы и реальные кейсы

🔊 Продолжай читать на Habr!


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥2