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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/csharp_ready
Download Telegram
Как сократить цепочки if/else по статусам?

Во многих проектах бизнес-логика по статусам размазана по коду длинными цепочками if/else: для каждого нового состояния появляется ещё один блок, читать и поддерживать это всё становится всё сложнее

Классический вариант быстро разрастается:
string text;

if (status == OrderStatus.New)
text = "Новый заказ";
else if (status == OrderStatus.Paid)
text = "Заказ оплачен";
else
text = "Неизвестный статус";


switch-expression делает то же самое компактным выражением:
var text = status switch
{
OrderStatus.New => "Новый заказ",
OrderStatus.Paid => "Заказ оплачен",
_ => "Неизвестный статус"
};


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

🔥 Хорошо заходит для маппинга enum → текст, выбора цвета, типа уведомления или уровня логирования.

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥9👍6
👩‍💻 Файлы без страха и боли!

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

В этом гайде:

Покажем, как аккуратно читать содержимое текстового файла;

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

Поможем перестать бояться путей, ошибок и пустых файлов.


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

➡️ C# Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥168👍3🤝2😁1
Как создавать коллекции без десятка Add?

Во многих местах сначала создаём коллекцию, а потом построчно заполняем её — кода получается больше, чем самих данных:
var ids = new List<int>();
ids.Add(1);
ids.Add(2);
ids.Add(3);

var byId = new Dictionary<int, string>();
byId.Add(1, "Alice");
byId.Add(2, "Bob");


С инициализаторами коллекций данные видно сразу, без шума вокруг:
var ids = new List<int> { 1, 2, 3 };

var byId = new Dictionary<int, string>
{
[1] = "Alice",
[2] = "Bob"
};


🔥 Такой стиль хорошо заходит для константных списков, словарей настроек, маппингов enum → текст и тестовых данных — код читается как набор значений, а не как сценарий заполнения.

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥148👍6
👩‍💻 Строим карту длины слов в тексте!

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

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

Превратим сырой набор строк в понятный материал для анализа;

Увидим, как разные слова распределяются по длине и частоте;

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


И в итоге получим маленький инструмент, который помогает внимательнее смотреть на любой текст.

➡️ C# Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥127👍3👎2🤝2
Удобный System.Text.Json в .NET 8 без Newtonsoft!

Во многих проектах до сих пор тянут Newtonsoft.Json только ради пары фич. В .NET 8 стандартный System.Text.Json уже закрывает большинство кейсов.

Сначала настраиваем опции сериализации и включаем snake_case:
using System;
using System.Text.Json;
using System.Text.Json.Serialization;

var options = new JsonSerializerOptions
{
// Имена свойств в JSON будут в snake_case
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
// Красивый формат для логов/отладки
WriteIndented = true
};


Описываем интерфейс и полиморфные реализации через атрибуты:
// Включаем полиморфную сериализацию по интерфейсу
[JsonPolymorphic(TypeDiscriminatorPropertyName = "$type")]
[JsonDerivedType(typeof(CreateUserCommand), typeDiscriminator: "create")]
[JsonDerivedType(typeof(DeleteUserCommand), typeDiscriminator: "delete")]
public interface ICommand { }

public record CreateUserCommand(string UserName) : ICommand;

public record DeleteUserCommand(Guid UserId) : ICommand;


Сериализуем команду в JSON и восстанавливаем обратно в интерфейс:
// Работаем через интерфейс — внутри может быть любая команда
ICommand cmd = new CreateUserCommand("test_user");

// Сериализация с нашими настройками
var json = JsonSerializer.Serialize(cmd, options);
Console.WriteLine(json);

// Десериализация обратно в ICommand
var restored = JsonSerializer.Deserialize<ICommand>(json, options);


🔥 Главное — в .NET 8 System.Text.Json уже умеет удобный snake_case и полиморфную сериализацию по интерфейсам, так что во многих сервисах можно спокойно обходиться без Newtonsoft.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥75
👩‍💻 Асинхронность без лишних сложностей!

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

В этом гайде:

Показываем, как ожидание не мешает выполнению программы;

Объясняем, почему асинхронность делает интерфейс плавнее;

Помогаем понять, где фоновые задачи действительно полезны.


Асинхронность — это способ делать больше без тормозов, сохраняя код простым и понятным.

➡️ C# Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥179👍6🤝2😁1
👍1911🔥7
👩‍💻 Регулярки без магии и боли!

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

➡️ C# Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥148👍6🤝3