C# Ready | Unity
9.82K subscribers
1.28K photos
76 videos
615 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
☕️ Programm․top — это образовательная платформа с теоретическими материалами, примерами и задачами!

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

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

C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥106👍6👎1
Почему nameof() лучше, чем строка, написанная руками?

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

Например:
throw new ArgumentNullException("user");


Пока параметр действительно называется user, проблем нет.
Но если позже кто-то переименует его, например в currentUser, строка останется старой. В итоге код уже изменился, а текст внутри исключения — нет.

Гораздо надёжнее использовать nameof():
throw new ArgumentNullException(nameof(user));


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

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

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

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥43😁1
📂 Напоминалка по иерархии памяти и работе storage!

Например, регистры — это самый быстрый уровень памяти внутри CPU, кэш (L1/L2/L3) снижает latency за счёт локальности данных, RAM хранит рабочее состояние приложений, а SSD/HDD используются для персистентного хранения с существенно более высоким временем доступа.

На картинке — базовая иерархия памяти, взаимодействие CPU — cache — RAM — disk, а также упрощённая модель работы HDD и архитектура SSD.

Сохрани, чтобы не потерять!

C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥106👍6
yield return — возвращаем значения по одному, а не всё сразу!

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

Обычный подход — сначала собрать список, а потом вернуть его:
List<int> GetNumbers()
{
var numbers = new List<int>();

for (int i = 1; i <= 5; i++)
{
numbers.Add(i);
}

return numbers;
}


Такой код работает, но сначала создаётся весь список целиком.

В C# можно использовать yield return, чтобы возвращать элементы по одному:
IEnumerable<int> GetNumbers()
{
for (int i = 1; i <= 5; i++)
{
yield return i;
}
}


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

Используем метод:
foreach (var number in GetNumbers())
{
Console.WriteLine(number);
}


Вот что получится при запуске:
1
2
3
4
5


🔥 yield return удобен, когда нужно лениво генерировать данные и не хранить всё сразу в памяти

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥8👍4
This media is not supported in your browser
VIEW IN TELEGRAM
🐱 Project-Based Learning — обучение через проекты!

Этот репозиторий собирает лучшие гайды, где вместо теории — реальные проекты, которые можно реализовать с нуля. Внутри есть десятки идей. В разделах по C++ и C# можно найти идеи разного уровня: работа с файлами, сетевое взаимодействие, графика, многопоточность и др. задачи.

Оставляю ссылочку: GitHub 📱


C# Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝11👍65🔥2
Почему string.IsNullOrWhiteSpace() лучше, чем несколько проверок подряд?

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

Например, такой код:
if (name == null || name == "")
{
return;
}


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

Гораздо понятнее выглядит такой вариант:
if (string.IsNullOrWhiteSpace(name))
{
return;
}


Здесь намерение видно сразу: строка не содержит нормального значения.
Не нужно вчитываться в детали условия — метод уже говорит всё за нас.

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

🔥 Маленькая замена, а условие становится заметно легче для чтения.

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍8🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
❤️ Booldev — годная шпаргалка по C# и .NET!

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

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

➡️ C# Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1210👍7
Почему var иногда читается лучше, чем явный тип?

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

Например, здесь:
Dictionary<string, List<User>> usersByRole = new Dictionary<string, List<User>>();


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

Гораздо проще читается такой вариант:
var usersByRole = new Dictionary<string, List<User>>();


Здесь внимание уходит не на длинное имя типа, а на сам смысл переменной.
Код выглядит легче, чище и быстрее считывается.

Важно: var хорошо работает именно там, где тип очевиден сразу.
Если по правой части непонятно, что лежит в переменной, явный тип может быть полезнее.

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

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍7🔥6
☕️ Нашёл годную статью — экспресс-введение в Avalonia UI, создание кроссплатформенного калькулятора на ․NET.

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

• Базовая подготовка: dotnet new + VS Code, установка шаблонов Avalonia
• Разметка интерфейса на Grid и биндинги MVVM через ReactiveUI
• Стилизация: от локальных сеттеров до готовой Material-темы

🟡 Рекомендую прочитать на Habr!


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥3
👩‍💻 Генерация случайностей на любой вкус — от int до байтов и double!

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

➡️ C# Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23🤝104👍2
📂 Напоминалка для работы с OOP Design Patterns!

Например, Factory помогает делегировать создание объектов, а Observer — удобно реализовать систему подписок и событий.

На картинке — 9 самых нужных паттернов, которые часто встречаются в реальных проектах и архитектуре.

Сохрани, чтобы не потерять!

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥139👍7🤝1
Почему Count читается лучше, чем Count()?

Когда у нас уже есть конкретная коллекция, например List<T> или массив, количество элементов можно получить напрямую через свойство. В таком случае запись через Count() выглядит чуть тяжелее, чем нужно.

Например, здесь:
if (users.Count() > 0)
{
SendPromo(users);
}


формально всё работает, но при чтении возникает лишний вопрос: зачем здесь LINQ-метод, если коллекция и так уже известна?

Гораздо проще воспринимается такой вариант:
if (users.Count > 0)
{
SendPromo(users);
}


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

Это особенно актуально в местах, где важна простота чтения: в if, валидации, guard-условиях и любой повседневной бизнес-логике.

Важно только помнить: такой подход подходит именно тогда, когда тип коллекции уже известен.

Если перед вами IEnumerable<T>, то свойства Count у него может не быть, и это уже другая ситуация.

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

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥5🤝3
😎 Иногда вложенные циклы в C# превращаются в маленький лабиринт!

Нашёл свежий разбор про labeled break и continue в C# 15 — фичу, которая может сделать выход из вложенных циклов чуть понятнее, но при неправильном использовании легко ухудшит читаемость.

В статье:

• как обычно выходят из нескольких вложенных циклов
• что предлагают labeled break и continue
• почему новая возможность не отменяет нормальный рефакторинг кода

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


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2🔥2
Отслеживаем изменения в папке через 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 | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥125👍5😁2
Получаем имя переменной с nameof безопасно!

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

Например, можно написать так:
string userName = "Анна";

Console.WriteLine("userName");


Такой код работает, но строка "userName" никак не связана с самой переменной.
Если потом переименовать переменную, строка не изменится автоматически.

В C# для этого есть оператор nameof:
string userName = "Анна";

Console.WriteLine(nameof(userName));


nameof возвращает имя переменной, свойства, класса или метода в виде строки.

Вот что получится при запуске:
userName


Это удобно, например, при проверке аргументов:
void PrintName(string name)
{
if (name == null)
throw new ArgumentNullException(nameof(name));

Console.WriteLine(name);
}


Теперь при переименовании параметра name IDE обновит и использование внутри nameof.

🔥 nameof помогает избежать ошибок в строках и делает код безопаснее при рефакторинге

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍7🔥5😁1
📝 Напоминалка по REST API!

Например, GET используют для получения данных, POST — для создания, PUT/PATCH — для обновления, а DELETE — для удаления ресурса.

На шпаргалке — принципы REST, HTTP-методы, версионирование, пагинация, фильтрация и best practices для API.

Сохрани, чтобы не потерять!

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
17🔥10👍5
👩‍💻 Убираем хрупкие строки с помощью nameof!

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

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

nameof возвращает имя элемента в виде строки

При переименовании IDE обновит ссылку, а не оставит старый текст

Особенно полезен в логах, ошибках, валидации и отладке


Маленькая фича, которая убирает “магические строки” и делает код спокойнее при рефакторинге.

➡️ C# Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🤝63