С выходом C# 8 появился новый способ писать условия декларативно и лаконично.
Что важно знать:
• Возвращает результат без лишних строк в вашем коде.
• Упрощает обработку разных вариантов данных в одном месте.
• Обеспечивает явную проверку и надёжность кода при изменениях.
Так вы получите более читаемые условия и не пропустите ни одного случая.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍6🤝6❤3
Срезы коллекций — когда нужна часть, а лишнее не нужно!
Иногда требуется взять только кусок массива или строки: первые элементы, последние — или вырезать середину. Раньше ради этого писали
В C# 8 появились операторы диапазонов
Создадим массив данных:
Берём элементы со 2-го по 3-й (правый край не включён):
Последние два элемента:
Всё, кроме первых двух и последних двух:
То же со строкой — вытаскиваем слово «Index»:
🔥
➡️ C# Ready | #практика
Иногда требуется взять только кусок массива или строки: первые элементы, последние — или вырезать середину. Раньше ради этого писали
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> без копирования: меньше аллокаций — выше производительность!Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤4👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Если нужно быстро понять сложную тему, эта нейросеть автоматически превращает длинный текст, видео или статью в структурированную mind-map. Полезно для подготовки к экзаменам, изучения новой темы или планирования проектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤4👍2
Он отключает проверки типов на этапе компиляции, позволяя вызывать методы и обращаться к свойствам без точного указания типа. Удобно, когда структура данных неизвестна заранее.
Что важно знать:
• Позволяет работать с JSON без создания классов.
• Подходит для COM-объектов и слабо типизированных API.
• Ошибки появляются только во время выполнения.
Поэтому
dynamic полезен, когда нужно быстро взаимодействовать с внешними данными или писать универсальный код.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤4👍4
Почему IEnumerable лучше не перечислять несколько раз?
Это может быть LINQ-запрос, чтение из файла, генератор или результат из базы.
Например:
На первый взгляд код нормальный.
Но
А потом
Для маленького массива это не проблема.
Но для тяжёлого источника данных это может быть дорого или даже привести к разным результатам.
Если нужен повторный доступ, лучше явно сохранить данные:
А если нужен только проход — не делай лишнюю проверку перед
🔥 IEnumerable<T> — это не всегда коллекция в памяти. Иногда это инструкция, как получить данные.
➡️ C# Ready | #совет
IEnumerable<T> выглядит как обычная коллекция, но это может быть не список.Это может быть LINQ-запрос, чтение из файла, генератор или результат из базы.
Например:
if (orders.Count() > 0)
{
foreach (var order in orders)
Process(order);
}
На первый взгляд код нормальный.
Но
Count() может пройти всю последовательность.А потом
foreach пройдёт её ещё раз.Для маленького массива это не проблема.
Но для тяжёлого источника данных это может быть дорого или даже привести к разным результатам.
Если нужен повторный доступ, лучше явно сохранить данные:
var orderList = orders.ToList();
А если нужен только проход — не делай лишнюю проверку перед
foreach.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🔥2
Напоминалка по async/await в C#!
Например,
На картинке краткая шпаргалка по
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
Например,
await не создаёт новый поток, а приостанавливает выполнение метода и освобождает текущий поток, пока операция не завершится.На картинке краткая шпаргалка по
async и await: зачем нужна асинхронность, какие бывают return-типы (Task, Task<T>), как работает state machine, чем отличается последовательный await от Task.WhenAll() и какие ошибки часто приводят к блокировкам.Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍5🤝5
Когда несколько потоков одновременно меняют одну переменную без синхронизации, результат становится непредсказуемым
Что важно знать:
• Оборачивай работу с разделяемым состоянием в lock (locker) { ... }
• Держи блокировку минимально короткой: никаких долгих операций, I/O или Thread.Sleep() внутри lock.
• Лишняя синхронизация превращается в узкое место производительности.
Поэтому,
lock помогает писать стабильный и предсказуемый многопоточный код.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🤝5🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Этот репозиторий собрал в одном месте огромное количество полезных материалов по .NET. Удобно, что всё структурировано и разбито по темам, поэтому можно использовать его как для изучения, так и как справочник в работе. Особенно полезен тем, кто хочет разобраться в экосистеме .NET, закрыть пробелы в знаниях и лучше понимать, какие технологии и подходы используются в разработке.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥6👍3
Сидеть и работать в корпорации — страшно, жизнь-то мимо проходит. Уходить строить бизнес — страшно, а вдруг прогорит. Один из вариантов — разрабатывать свой пет-проект по вечерам. Многие успешные компании, например, Twitter, создавались именно так. Это не значит, что ваш проект обязательно заработает миллиарды, но заработать больше, чем в найме, и получить ценный опыт — вполне реально.
Перед началом разработки появляется множество вопросов, например:
• Как выбрать идею для пет-проекта?
• Что нужно знать про маркетинг
• Как запуститься и довести до первых продаж не имея бюджета на рекламу?
В телеграм-канале «Твой пет проект», Михаил Табунов делится своим опытом с разработчиками и менеджерами.
Он рассказывает, где искать идею для нового проекта, что нужно знать о маркетинге, как запустить стартап и привлечь первых 10 клиентов, а также о многих других важных вещах.
Подписывайтесь на «Твой пет проект», получайте пользу от практиков рынка!
https://t.me/+8Frwa03ciVlhNTky
Перед началом разработки появляется множество вопросов, например:
• Как выбрать идею для пет-проекта?
• Что нужно знать про маркетинг
• Как запуститься и довести до первых продаж не имея бюджета на рекламу?
В телеграм-канале «Твой пет проект», Михаил Табунов делится своим опытом с разработчиками и менеджерами.
Он рассказывает, где искать идею для нового проекта, что нужно знать о маркетинге, как запустить стартап и привлечь первых 10 клиентов, а также о многих других важных вещах.
Подписывайтесь на «Твой пет проект», получайте пользу от практиков рынка!
https://t.me/+8Frwa03ciVlhNTky
Telegram
Твой пет проект
Канал про то, как создать свой маленький свечной заводик
Пишу про:
- Запуски и как сделать первые 10 продаж
- Прожарка идей
- Кейсы роста и ведения проекта параллельно с работой
Автор - Михаил Табунов - @bossofyourboss
Связь @to_baza_education
Пишу про:
- Запуски и как сделать первые 10 продаж
- Прожарка идей
- Кейсы роста и ведения проекта параллельно с работой
Автор - Михаил Табунов - @bossofyourboss
Связь @to_baza_education
Фильтруем пользователей по домену email через LINQ!
Допустим, у нас есть список пользователей, и нужно достать только email-адреса на gmail.com.
Создадим простую модель:
Подготовим данные:
Можно пройтись циклом и вручную собрать результат:
Но через LINQ это читается короче:
Select достаёт из пользователя только email.
Where оставляет адреса с нужным доменом.
В результате получим:
Такой подход удобно использовать для фильтрации клиентов, подписчиков, заявок, логов, доменов, тегов и любых списков объектов.
Если регистр может отличаться, лучше явно указать сравнение:
Select() + Where() это удобная связка LINQ, когда нужно достать поле и отфильтровать его по условию.
➡️ C# Ready | #практика
Допустим, у нас есть список пользователей, и нужно достать только 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, когда нужно достать поле и отфильтровать его по условию.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥3