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
This media is not supported in your browser
VIEW IN TELEGRAM
😎 ZetCode — это крутой справочник с подробными туториалами и примерами кода!

Здесь собраны пошаговые гайды по базовому синтаксису C#, объектно-ориентированному программированию, LINQ, async/await, работе с SQLite, файловой системой и многим другим.

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

C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥116👍5
Почему HashSet лучше List для частых Contains()?

Когда коллекция нужна только для проверки “есть элемент или нет”, List выглядит привычно, но работает не так удачно, как может показаться. Особенно если таких проверок много.

Проблема обычно появляется в циклах, где Contains() вызывается снова и снова.
var ids = blockedUsers.Select(x => x.Id).ToList();

foreach (var order in orders)
{
if (ids.Contains(order.UserId))
{
order.MarkForReview();
}
}


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

Если порядок элементов не важен и коллекция нужна именно для быстрых проверок, лучше использовать HashSet.
var ids = blockedUsers.Select(x => x.Id).ToHashSet();

foreach (var order in orders)
{
if (ids.Contains(order.UserId))
{
order.MarkForReview();
}
}


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

🔥 Если коллекция нужна в первую очередь для Contains(), это почти всегда хороший повод выбрать HashSet.

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

Например, Load Balancing распределяет нагрузку между серверами, а Caching помогает ускорить ответы за счёт хранения данных в памяти.

На картинке — 12 основных концепций, которые должен понимать каждый разработчик.

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

C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍148🔥7
This media is not supported in your browser
VIEW IN TELEGRAM
👍 Free Programming Books — библиотека ресурсов по программированию на различных языках!

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

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


➡️ C# Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
19🔥11👍9
Почему интерполяция строк читается лучше, чем конкатенация через +?

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

Например, здесь:
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