Он отключает проверки типов на этапе компиляции, позволяя вызывать методы и обращаться к свойствам без точного указания типа. Удобно, когда структура данных неизвестна заранее.
Что важно знать:
• Позволяет работать с 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
Напоминалка по исключениям в C#!
Например, NullReferenceException часто появляется при обращении к объекту, который равен null, а ArgumentNullException обычно используют, когда в метод передали обязательный аргумент без значения.
На картинке иерархия исключений в C#: Exception, SystemException, ApplicationException, ArgumentException, IOException и другие популярные типы ошибок.
Сохрани, чтобы не потерять!
➡️ C# Ready | #ресурс
Например, NullReferenceException часто появляется при обращении к объекту, который равен null, а ArgumentNullException обычно используют, когда в метод передали обязательный аргумент без значения.
На картинке иерархия исключений в C#: Exception, SystemException, ApplicationException, ArgumentException, IOException и другие популярные типы ошибок.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Изоляция рунета произошла быстрее, чем ты думал
Роскомнадзору воспользовался карт-бланшем на блокировку, а «белые списки» сайтов внедрены уже во всех регионах. И гайки будут закручиваться только сильнее.
Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack.
Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса.
Не жди момента «Х». Перестрахуйся подпиской.
Loading …
██████████████] 99%
Роскомнадзору воспользовался карт-бланшем на блокировку, а «белые списки» сайтов внедрены уже во всех регионах. И гайки будут закручиваться только сильнее.
Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack.
Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса.
Не жди момента «Х». Перестрахуйся подпиской.
❤2😁2
Почему для времени события часто лучше DateTimeOffset, а не DateTime?
В C# часто пишут так:
Но DateTime.Now зависит от локального времени сервера.
Если приложение работает в разных часовых поясах, в Docker, в облаке или просто переезжает на другой сервер, это может привести к путанице.
Для моментов времени чаще удобнее использовать:
DateTimeOffset хранит не только дату и время, но и смещение относительно UTC.
Это делает значение понятнее при логах, событиях, API, заказах, платежах и аудите.
А для отображения пользователю время уже можно переводить в его часовой пояс отдельно.
Для хранения момента события DateTimeOffset.UtcNow часто безопаснее, чем DateTime.Now.
➡️ C# Ready | #совет
В C# часто пишут так:
var createdAt = DateTime.Now;
Но DateTime.Now зависит от локального времени сервера.
Если приложение работает в разных часовых поясах, в Docker, в облаке или просто переезжает на другой сервер, это может привести к путанице.
Для моментов времени чаще удобнее использовать:
var createdAt = DateTimeOffset.UtcNow;
DateTimeOffset хранит не только дату и время, но и смещение относительно UTC.
Это делает значение понятнее при логах, событиях, API, заказах, платежах и аудите.
А для отображения пользователю время уже можно переводить в его часовой пояс отдельно.
Для хранения момента события DateTimeOffset.UtcNow часто безопаснее, чем DateTime.Now.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥2