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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/csharp_ready
Download Telegram
Почему интерполяция строк читается лучше, чем конкатенация через +?

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

Например, здесь:
var message = "User: " + name + ", age: " + age;


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

Гораздо проще воспринимается такой вариант:
var message = $"User: {name}, age: {age}";


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

Особенно хорошо это заметно в логах, сообщениях, ошибках, DTO-моделях и любом месте, где строка формируется из нескольких значений.

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

➡️ C# Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍8🔥4👎2
📂 Напоминалка по системам хранения данных!

Например, CPU cache и RAM дают минимальную задержку и используются для быстрых вычислений, а cloud storage и базы данных — для долговременного хранения и масштабирования.

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

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

C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍149🔥7🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
✍️ CyberForum — крупнейшее сообщество разработчиков с разделами по C++ и C#!

Форум, где можно обсуждать задачи, получать помощь и разбирать кейсы из разработки. Есть активные разделы по C++ и C#: обсуждение синтаксиса, разбор ошибок, советы по обучению и практическая помощь. Форум можно использовать как источник знаний, особенно когда требуется разобраться в конкретной задаче или посмотреть, как её решают другие разработчик.

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

➡️ C# Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16🤝65
Почему 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
26👍9🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
😍 PVS-Studio Blog — технические статьи по коду и разработке!

Здесь публикуются подробные разборы ошибок, уязвимостей и практик разработки. Основной фокус на статический анализ кода и реальные кейсы из проектов, включая разборы популярных open-source решений. Блог активно покрывает C++ и C#: публикуются статьи по анализу, поиску багов, особенностям работы компиляторов и практике.

📌 Оставляю ссылочку: pvs-studio.ru

➡️ C# Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥146👍5
Dictionary<TKey, TValue> — быстрый доступ к данным по ключу

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

Например, у нас есть набор пользователей и их возрастов.
Если хранить это в массиве или списке, поиск будет менее удобным.

В C# для таких задач используется Dictionary<TKey, TValue>:
using System;
using System.Collections.Generic;


Создадим словарь, где ключ — это имя, а значение — возраст:
Dictionary<string, int> ages = new Dictionary<string, int>
{
["Анна"] = 25,
["Игорь"] = 31,
["Мария"] = 28
};

Console.WriteLine(ages["Игорь"]);


Здесь:
string — тип ключа,
int — тип значения.

Мы обращаемся к словарю по ключу "Игорь" и сразу получаем его возраст.

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


🔥 Dictionary удобно использовать, когда нужно быстро получать данные по имени, id, коду или любому другому ключу

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍54
📂 Шпаргалка по вычислительным архитектурам!

Например, CPU хорошо справляется с логикой, ветвлениями и задачами с низкой задержкой. GPU — про массовый параллелизм: подходит для обработки больших массивов данных, графики и вычислений.

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

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

C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤝76
👩‍💻 Познакомимся с методами Encoding — инструментом для конвертации строк в байты и обратно!

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

➡️ C# Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥8👍4🤝3
❤️ Нашёл отличную статью на Хабре — подробное пошаговое руководство по созданию Telegram-бота-мессенджера на C#.

В этой статье:
• Подготовка базы данных PostgreSQL и настройка миграций EF Core
• Проектирование моделей данных и сервисных методов обмена сообщениями
• Реализация клавиатур и inline-кнопок для удобного интерфейса бота

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


➡️ C# Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍7🔥5👎1
Обрабатываем пары значений с tuple-паттернами в switch!

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

Раньше такую логику реализовывали через цепочку if-ов:
if (x == 0 && y == 0)
return "Начало координат";
else if (x == 0)
return "На оси Y";
else if (y == 0)
return "На оси X";
else
return "Другая точка";


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

Сейчас перепишем на современный switch с tuple-паттернами:
return (x, y) switch
{
(0, 0) => "Начало координат",
(0, _) => "На оси Y",
(_, 0) => "На оси X",
_ => "Другая точка"
};


🔥 Выражение стало компактнее, логика читается лучше, а добавление новых комбинаций — проще.

➡️ C# Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥6👍3
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