csharp_ready | Unsorted

Telegram-канал csharp_ready - C# Ready | Unity

9818

Авторский канал по разработке на C# и Unity. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it РКН: https://clck.ru/3SBaT3 Реклама на бирже: https://telega.in/c/csharp_ready

Subscribe to a channel

C# Ready | Unity

❤️‍🔥"Это разъ*бный сетап, бро!" 😤

Так сказал мой друг из Африки, когда увидел этот стол)
Не знаю уж че за сетап, меня зовут Саша и качественную необычную мебель из натурального дерева я делаю уже больше 12-ти лет, столько же занимаюсь и темой здоровья.

Когда я услышал, что до 10% смертности связано с сидячим образом жизни, меня это поразило и я задался целью делать максимально функциональные и полезные рабочие пространства, ибо геморрой в 30 это конечно довольно нишево, но все же сомнительно 😂

Ну а собрать такой комплект под свои задачи и при этом сразу прикинуть цены вы можете в удобном Mini App конструкторе ➕

Читать полностью…

C# Ready | Unity

Теперь небольшую программу на C# можно запустить прямо из одного файла!

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

• Как работают File-Based Apps в .NET 10
• Как запустить .cs-файл без создания отдельного проекта
• Каким способом подключать NuGet-пакеты и дополнительные настройки
• Когда такой формат удобен для скриптов, автоматизации и быстрых экспериментов

Получается знакомая простота скриптовых языков, но с возможностями C# и всей экосистемой .NET.

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


➡️ C# Ready | #статья

Читать полностью…

C# Ready | Unity

FirstOrDefault() может вернуть null!

В C# часто ищут элемент в коллекции через LINQ:

var user = users.FirstOrDefault(u => u.Id == id);


Если пользователь найден то всё хорошо.

Но если подходящего элемента нет, FirstOrDefault() вернёт значение по умолчанию.

Для ссылочных типов это обычно:
null


Поэтому такой код может упасть:
Console.WriteLine(user.Name);


Если user оказался null, получим NullReferenceException.

Лучше явно обработать отсутствие результата:
var user = users.FirstOrDefault(u => u.Id == id);

if (user is null)
{
return;
}


Или выбросить понятную ошибку:
var user = users.FirstOrDefault(u => u.Id == id)
?? throw new InvalidOperationException("User not found");


Это особенно важно в API, сервисах, обработчиках команд и бизнес-логике.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

Считаем количество заказов по статусам через LINQ!

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

Создадим простую модель:

public record Order(string Status, decimal Amount);


Подготовим данные:
var orders = new List<Order>
{
new("Paid", 1200m),
new("New", 500m),
new("Paid", 300m),
new("Cancelled", 100m)
};


Можно вручную обновлять словарь:
var result = new Dictionary<string, int>();

foreach (var order in orders)
{
if (!result.ContainsKey(order.Status))
{
result[order.Status] = 0;
}

result[order.Status]++;
}


Но через LINQ это выглядит компактнее:
var result = orders
.GroupBy(order => order.Status)
.ToDictionary(g => g.Key, g => g.Count());


GroupBy() собирает заказы в группы по статусу.

ToDictionary() превращает эти группы в словарь, где ключ это статус, а значение это количество заказов.

Результат будет примерно таким:

Paid      -> 2
New -> 1
Cancelled -> 1


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


➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

Напоминалка по pattern matching в C#!

Например, case string s проверяет тип и сразу даёт переменную, а FileInfo { Extension: ".html" } позволяет матчить объект по его свойствам.

На картинке основные виды pattern matching: type pattern, property pattern, positional pattern, relational pattern и null pattern.

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

➡️ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

Почему для времени события часто лучше DateTimeOffset, а не DateTime?

В C# часто пишут так:

var createdAt = DateTime.Now;


Но DateTime.Now зависит от локального времени сервера.

Если приложение работает в разных часовых поясах, в Docker, в облаке или просто переезжает на другой сервер, это может привести к путанице.

Для моментов времени чаще удобнее использовать:
var createdAt = DateTimeOffset.UtcNow;


DateTimeOffset хранит не только дату и время, но и смещение относительно UTC.

Это делает значение понятнее при логах, событиях, API, заказах, платежах и аудите.

А для отображения пользователю время уже можно переводить в его часовой пояс отдельно.

Для хранения момента события DateTimeOffset.UtcNow часто безопаснее, чем DateTime.Now.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

Фильтруем пользователей по домену email через LINQ!

Допустим, у нас есть список пользователей, и нужно достать только email-адреса на gmail.com.
Создадим простую модель:

public record User(string Name, string Email);


Подготовим данные:
var users = new List<User>
{
new("Alex", "alex@gmail.com"),
new("Maria", "maria@company.com"),
new("Bob", "bob@gmail.com")
};


Можно пройтись циклом и вручную собрать результат:
var result = new List<string>();

foreach (var user in users)
{
if (user.Email.EndsWith("@gmail.com"))
{
result.Add(user.Email);
}
}


Но через LINQ это читается короче:
var result = users
.Select(user => user.Email)
.Where(email => email.EndsWith("@gmail.com"))
.ToList();


Select достаёт из пользователя только email.
Where оставляет адреса с нужным доменом.
В результате получим:
alex@gmail.com
bob@gmail.com


Такой подход удобно использовать для фильтрации клиентов, подписчиков, заявок, логов, доменов, тегов и любых списков объектов.
Если регистр может отличаться, лучше явно указать сравнение:
email.EndsWith(
"@gmail.com",
StringComparison.OrdinalIgnoreCase
)


Select() + Where() это удобная связка LINQ, когда нужно достать поле и отфильтровать его по условию.

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

🤔 .NET Mastery Hub — большая база знаний по .NET для разработчиков!

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

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


➡️ C# Ready | #репозиторий

Читать полностью…

C# Ready | Unity

Напоминалка по async/await в C#!

Например, await не создаёт новый поток, а приостанавливает выполнение метода и освобождает текущий поток, пока операция не завершится.

На картинке краткая шпаргалка по async и await: зачем нужна асинхронность, какие бывают return-типы (Task, Task<T>), как работает state machine, чем отличается последовательный await от Task.WhenAll() и какие ошибки часто приводят к блокировкам.

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

➡️ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

👩‍💻 Разбираемся с dynamic — максимум гибкости без жёсткой типизации!

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

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

• Позволяет работать с JSON без создания классов.

• Подходит для COM-объектов и слабо типизированных API.

• Ошибки появляются только во время выполнения.


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

➡ C# Ready | #гайд

Читать полностью…

C# Ready | Unity

Срезы коллекций — когда нужна часть, а лишнее не нужно!

Иногда требуется взять только кусок массива или строки: первые элементы, последние — или вырезать середину. Раньше ради этого писали Substring, Skip / Take и плодили лишние аллокации.

В C# 8 появились операторы диапазонов .. и индексов с конца ^, которые делают такие операции короче и нагляднее.

Создадим массив данных:

int[] data = { 10, 20, 30, 40, 50, 60 };


Берём элементы со 2-го по 3-й (правый край не включён):
int[] middle = data[1..3];      // {20, 30}


Последние два элемента:
int[] lastTwo = data[^2..];     // {50, 60}


Всё, кроме первых двух и последних двух:
int[] withoutEdges = data[2..^2]; // {30, 40}


То же со строкой — вытаскиваем слово «Index»:
string text = "Range & Index";
string word = text[^5..]; // "Index"


🔥 Range и Index делают код короче, читаемее и позволяют работать с Span<T> без копирования: меньше аллокаций — выше производительность!

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

📂 Напоминалка для работы со списками!

Например, Add() добавляет элемент в конец списка, а Contains() позволяет проверить наличие значения.

На картинке — основные методы List<T>, которые чаще всего используются в повседневной разработке.

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

➡️ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

✍️ Gizmo AI — нейросеть для обучения и запоминания информации!

AI-сервис, который помогает превращать заметки, PDF, статьи, видео и другие материалы в карточки для обучения и квизы. Нейросеть автоматически выделяет главное, генерирует вопросы и помогает быстрее запоминать информацию с помощью повторения и интерактивного формата обучения.

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

➡️ C# Ready | #сайт

Читать полностью…

C# Ready | Unity

📂 Шпаргалка по Server-Sent Events в ASP.NET Core и .NET 10!

Например, SSE позволяет серверу мгновенно отправлять обновления клиенту через обычный HTTP, а встроенный SSE API в .NET 10 упрощает реализацию realtime-уведомлений.

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

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

➡️ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

👩‍💻 C# 13 без лишнего — быстро, чисто, понятно!

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

➡️ C# Ready | #шпора

Читать полностью…

C# Ready | Unity

Почему технические строки не стоит сравнивать через ToLower()?

Для проверки логина, роли или кода часто пишут так:

if (role.ToLower() == "admin")
{
GrantAccess();
}


Код работает во многих случаях, но ToLower() создаёт новую строку и использует правила текущей культуры приложения.

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

Для этого лучше явно указать тип сравнения:

if (string.Equals(role, "admin", StringComparison.OrdinalIgnoreCase))
{
GrantAccess();
}


OrdinalIgnoreCase не создаёт промежуточную строку и выполняет регистронезависимое порядковое сравнение. Поведение не изменится после запуска приложения на сервере с другой локалью.

Если же сравнивается текст для пользователя, например названия или элементы поиска, может понадобиться CurrentCultureIgnoreCase.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

Почему технические строки не стоит сравнивать через ToLower()?

Для проверки логина, роли или кода часто пишут так:

if (role.ToLower() == "admin")
{
GrantAccess();
}


Код работает во многих случаях, но ToLower() создаёт новую строку и использует правила текущей культуры приложения.

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

Для этого лучше явно указать тип сравнения:

if (string.Equals(role, "admin", StringComparison.OrdinalIgnoreCase))
{
GrantAccess();
}


OrdinalIgnoreCase не создаёт промежуточную строку и выполняет регистронезависимое порядковое сравнение. Поведение не изменится после запуска приложения на сервере с другой локалью.

Если же сравнивается текст для пользователя, например названия или элементы поиска, может понадобиться CurrentCultureIgnoreCase.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

👩‍💻 Сегодня рассмотрим Channel<T> — безопасная асинхронная очередь задач в .NET

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

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

• Работает без ручных блокировок и сложных синхронных вызовов.

• Позволяет автоматически замедлять отправку при перегрузке памяти.

• Обеспечивает плавную передачу данных между параллельными задачами.


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

➡ C# Ready | #гайд

Читать полностью…

C# Ready | Unity

🤖 ChatGPT в твоих руках: от вопроса до результата за минуту

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

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

😉 Не переживай, мы берём оформление на себя. Ты оформляешь заказ и предоставляешь необходимые данные, а мы активируем подписку за 5–15 минут. Иностранная карта и взаимодействие с платёжной системой OpenAI не потребуются.


💳 Оплата российской картой или через СБП
⚡️ Активация в течение 5–15 минут после получения необходимых данных
🔒 Поддержка на весь срок подписки и помощь при возникновении вопросов
⭐️ Более 3 лет опыта и 15 000+ выполненных заказов


😎 Оформи заказ и начни пользоваться ChatGPT уже сегодня!

💡 Также помогаем с оформлением других AI-подписок (Claude, Gemini и т.д.).

👉 ChatGPT Store

Читать полностью…

C# Ready | Unity

👍 bookflow — полезные материалы для изучения различных языков!

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

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

➡️ C# Ready | #сайт

Читать полностью…

C# Ready | Unity

Напоминалка по исключениям в C#!

Например, NullReferenceException часто появляется при обращении к объекту, который равен null, а ArgumentNullException обычно используют, когда в метод передали обязательный аргумент без значения.

На картинке иерархия исключений в C#: Exception, SystemException, ApplicationException, ArgumentException, IOException и другие популярные типы ошибок.

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

➡️ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

Сидеть и работать в корпорации — страшно, жизнь-то мимо проходит. Уходить строить бизнес — страшно, а вдруг прогорит. Один из вариантов — разрабатывать свой пет-проект по вечерам. Многие успешные компании, например, Twitter, создавались именно так. Это не значит, что ваш проект обязательно заработает миллиарды, но заработать больше, чем в найме, и получить ценный опыт — вполне реально.

Перед началом разработки появляется множество вопросов, например:

• Как выбрать идею для пет-проекта?
• Что нужно знать про маркетинг
• Как запуститься и довести до первых продаж не имея бюджета на рекламу?

В телеграм-канале «Твой пет проект», Михаил Табунов делится своим опытом с разработчиками и менеджерами.

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

Подписывайтесь на «Твой пет проект», получайте пользу от практиков рынка!
/channel/+8Frwa03ciVlhNTky

Читать полностью…

C# Ready | Unity

👩‍💻 Разбираемся с lock — простой защита от гонок потоков и порчи общих данных!

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

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

• Оборачивай работу с разделяемым состоянием в lock (locker) { ... }

• Держи блокировку минимально короткой: никаких долгих операций, I/O или Thread.Sleep() внутри lock.

• Лишняя синхронизация превращается в узкое место производительности.


Поэтому, lock помогает писать стабильный и предсказуемый многопоточный код.

➡ C# Ready | #гайд

Читать полностью…

C# Ready | Unity

Почему IEnumerable лучше не перечислять несколько раз?

IEnumerable<T> выглядит как обычная коллекция, но это может быть не список.

Это может быть LINQ-запрос, чтение из файла, генератор или результат из базы.

Например:

if (orders.Count() > 0)
{
foreach (var order in orders)
Process(order);
}


На первый взгляд код нормальный.

Но Count() может пройти всю последовательность.
А потом foreach пройдёт её ещё раз.

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

Если нужен повторный доступ, лучше явно сохранить данные:
var orderList = orders.ToList();


А если нужен только проход — не делай лишнюю проверку перед foreach.

🔥 IEnumerable<T> — это не всегда коллекция в памяти. Иногда это инструкция, как получить данные.

➡️ C# Ready | #совет

Читать полностью…

C# Ready | Unity

🐱 Mapify — нейросеть, которая превращает любой текст в наглядную mind-map!

Если нужно быстро понять сложную тему, эта нейросеть автоматически превращает длинный текст, видео или статью в структурированную mind-map. Полезно для подготовки к экзаменам, изучения новой темы или планирования проектов.

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

➡️ C# Ready | #сайт

Читать полностью…

C# Ready | Unity

7 дней тест-драйва IT-профессии фронтенд-разработчик

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

Почувствуй разницу:

До: Скучная рутина и «стеклянный потолок» в доходах.
После: Азарт от решения задач и старт с 50 000 руб. уже через месяц с возможным ростом
до 200 000 руб.

До: Постоянная стагнация и страх перед завтрашним днем.
После: Стремительный профрост и востребованность на рынке.

Роман Чернов, фронтенд-разработчик с 12-летним стажем, берет тебя в ученики на 7-дневный тест-драйв.

Ты не будешь просто слушать, ты создашь за неделю проект стоимостью 20 000 руб.:

1. Верстка: С нуля соберешь стильный веб-сайт на HTML + CSS.
2. Интерактив: «Оживишь» его анимацией и функционалом.
3. Запуск: подключишь backend и выложишь готовый продукт в интернет.

Итог: готовый проект в портфолио, понимание рынка и навыки, которые делают тебя востребованным специалистом. Даже если ты впервые слышишь про HTML.

👉 Ухватить обучение бесплатно

Набор открыт до 24.06.

Читать полностью…

C# Ready | Unity

👩‍💻 Разберем switch-выражения — компактнее и выразительнее!

С выходом C# 8 появился новый способ писать условия декларативно и лаконично.

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

• Возвращает результат без лишних строк в вашем коде.

• Упрощает обработку разных вариантов данных в одном месте.

• Обеспечивает явную проверку и надёжность кода при изменениях.


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

➡ C# Ready | #гайд

Читать полностью…

C# Ready | Unity

record — удобно создаём типы для хранения данных!

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

Обычно для этого пишут обычный класс:

class User
{
public string Name { get; set; }
public int Age { get; set; }

public User(string name, int age)
{
Name = name;
Age = age;
}
}


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

В C# можно использовать record, чтобы описывать такие типы короче:
csharp id="svqk8g"
using System;

record User(string Name, int Age);


Теперь создадим объект и выведем его в консоль:
csharp id="m79oqr"
User user = new User("Анна", 25);

Console.WriteLine(user);


Вот что получится при запуске:
csharp id="ww9ua2"
User { Name = Анна, Age = 25 }


record особенно удобен для моделей, где важны сами данные, а не сложное поведение объекта.

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

➡️ C# Ready | #практика

Читать полностью…

C# Ready | Unity

🤓 Шпаргалка по Git — всё самое важное в одном месте!

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

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

➡️ C# Ready | #ресурс

Читать полностью…

C# Ready | Unity

📂 Как выбрать cloud database и не утонуть в вариантах?

В облаках есть разные классы баз: relational, key-value, document, wide-column, graph, time-series, search и analytical databases. У каждой модели свои сильные стороны: транзакции, скорость чтения, горизонтальное масштабирование, гибкая схема или аналитические запросы.

На картинке - сравнение облачных database-сервисов и близких open-source альтернатив.

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

➡️ C# Ready | #ресурс

Читать полностью…
Subscribe to a channel