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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/csharp_ready
Download Telegram
👩‍💻 ConcurrentDictionary без гонок и боли!

В этой шпаргалке — как безопасно кэшировать значения, делать upsert и счётчики, читать без исключений, обновлять по CAS-логике, удалять с возвратом и быстро сбрасывать состояние, не ловя race conditions в многопоточке.

➡️ C# Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥145👍3
❤️ Нашёл крутую статью про оптимизацию рендера в MonoGame!

В этой статье:
• Как устроить слои и батчи, чтобы сократить число draw call.
• Как использовать инстансинг для повторяющихся элементов персонажа.
• Как измерять прирост производительности после изменений.


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


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104🔥3
int.TryParse в C#: перестаём падать на пользовательском вводе!

Пользователь вводит число в поле, и всё работает до первого «abc» или пустой строки. После этого приложение ловит исключение и ты тратишь время на разбор банального кейса.

Часто пишут так:
Console.Write("Введите возраст: ");
string input = Console.ReadLine()!;
int age = int.Parse(input);

Console.WriteLine($"Возраст: {age}");


int.Parse хорош, когда формат уже гарантирован. Для пользовательского ввода безопаснее использовать int.TryParse.
Console.Write("Введите возраст: ");
string? input = Console.ReadLine();

if (int.TryParse(input, out int age))
{
Console.WriteLine($"Возраст: {age}");
}
else
{
Console.WriteLine("Некорректный ввод. Введите целое число.");
}


Теперь программа не падает, а спокойно обрабатывает ошибку и продолжает работу.

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

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥8👍4
This media is not supported in your browser
VIEW IN TELEGRAM
👐 freeCodeCamp Foundational C#— бесплатная учебная программа, сделанные чтобы дать крепкую базу по C#!

Внутри — обучение через материалы Microsoft Learn + проверки знаний на стороне freeCodeCamp: ты пройдёшь основы языка (переменные, типы данных, управляющие конструкции) и базовые принципы ООП

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

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍106🔥6
8🔥6👍4
Что же выведет консоль?
Anonymous Quiz
27%
A
6%
B
57%
C
10%
D
🔥186👍3
☕️ Нашёл полезный материал на Хабре — конкретные NuGet-пакеты для повседневной разработки!

В этой статье:
• Какие пакеты реально экономят время в типовых задачах.
• Где пакет уместен в проде, а где лучше остаться на стандартном API.
• Как оценивать риски новой зависимости перед подключением.


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


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍106🔥5👎2
Почему async void приводит к потерянным ошибкам?

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

Поэтому баги всплывают позже и разбор занимает больше времени.

Вот как обычно выглядит такая ситуация:
static async void ProcessOrderAsync(int id)
{
await Task.Delay(100);
throw new InvalidOperationException($"Order {id} failed");
}

ProcessOrderAsync(42);
Console.WriteLine("Дальше код идёт как будто всё хорошо");


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

Надёжнее вернуть Task и явно дождаться выполнения:
static async Task ProcessOrderAsync(int id)
{
await Task.Delay(100);
throw new InvalidOperationException($"Order {id} failed");
}

try
{
await ProcessOrderAsync(42);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}


Теперь поведение предсказуемо. Ты сразу видишь точку ошибки и можешь обработать её в нужном месте.

🔥 В обычном коде используйте async Task. async void оставляйте только для обработчиков событий.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍8🔥6
22🔥13👍6😁3
Как убрать «лес» вложенных `if` из метода?

Часто вся валидация и проверки прав зашиваются внутрь одной большой конструкции, и тело метода уезжает вправо на пол-экрана:
void ProcessOrder(Order order)
{
if (order != null)
{
if (order.IsPaid)
{
if (!order.IsCancelled)
{
Ship(order);
}
}
}
}


С guard-условиями (ранними выходами) проверки поднимаем в начало, а дальше оставляем только «нормальный путь»:
void ProcessOrder(Order order)
{
if (order is null) return;
if (!order.IsPaid) return;
if (order.IsCancelled) return;

Ship(order);
}


Метод читается сверху вниз как список требований, а основная логика не утопает во вложениях. Такой подход хорошо заходит для валидаций, проверок прав, preconditions в сервисах и хендлерах.

🔥 Меньше вложенности, легче читать диффы и гораздо проще добавлять новые условия.

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
33🔥8🤝4
This media is not supported in your browser
VIEW IN TELEGRAM
❤️ Andrew Lock — .NET Escapades — блог и персональный сайт для .NET-разработчиков!

Технический блог от опытного .NET разработчика и Microsoft MVP, где автор делится глубокими практическими заметками, гайдами и идеями по современному разработку с ASP.NET Core, C#, .NET Core/NET 10 и связанным инструментам.

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

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥114👍4
👩‍💻 PDF-счёт за секунды без рутины

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

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

Меняет стиль легко

Работает на любом компьютере

Создаёт файл мгновенно


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

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
14🤝11👍4🔥2