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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/csharp_ready
Download Telegram
Почему 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 | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3🔥2
Напоминалка по async/await в C#!

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

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

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

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
15👍5🤝5
👩‍💻 Разбираемся с lock — простой защита от гонок потоков и порчи общих данных!

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

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

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

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

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


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

C# Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115🤝5🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
🤔 .NET Mastery Hub — большая база знаний по .NET для разработчиков!

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

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


➡️ C# Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥6👍3
👍7🔥32
Сидеть и работать в корпорации — страшно, жизнь-то мимо проходит. Уходить строить бизнес — страшно, а вдруг прогорит. Один из вариантов — разрабатывать свой пет-проект по вечерам. Многие успешные компании, например, Twitter, создавались именно так. Это не значит, что ваш проект обязательно заработает миллиарды, но заработать больше, чем в найме, и получить ценный опыт — вполне реально.

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

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

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

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

Подписывайтесь на «Твой пет проект», получайте пользу от практиков рынка!
https://t.me/+8Frwa03ciVlhNTky
Фильтруем пользователей по домену 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 | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4🔥3
Напоминалка по исключениям в C#!

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

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

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

➡️ C# Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1