Метод Enum.TryParse кажется идеальным инструментом для безопасного парсинга строк в enum — он не бросает исключения и возвращает bool, сигнализируя об успехе или неудаче операции.
Но у этого метода есть неочевидное поведение, которое может привести к багам.
Представьте ситуацию: пользователь передаёт статус заказа через API, вы парсите его через
TryParse, получаете true, уверенно обрабатываете заказ... и внезапно обнаруживаете в базе статус со значением 999, которого в вашем енаме вообще не существует.Enum.TryParse возвращает true даже для несуществующих значений enum:public enum OrderType
{
Cool = 0,
NotCool = 1
}
// Парсим значение, которого НЕТ в enum
Enum.TryParse("999", out OrderType type);
// ✓ Вернёт TRUE
// ✓ day = (OrderType)999
// ✗ Но 999 не определён в OrderType!
Console.WriteLine($"Результат: {type}"); // Вывод: 999
TryParse проверяет только возможность конвертации строки в числовой тип, а не валидность значения для конкретного enum.Решение
Добавьте проверку через Enum.IsDefined:
if (Enum.TryParse("999", out OrderType type) &&
Enum.IsDefined(typeof(OrderType), type))
{
// Здесь значение гарантированно валидно
} else {
// 999 будет правильно отклонено
}Enum.IsDefined использует рефлексию и может быть медленным в hot path. Альтернативы:
// Для hot path: кешируем валидные значения
private static readonly HashSet<OrderType> ValidValues =
new(Enum.GetValues<OrderType>());
public static bool IsValid(OrderType value) =>
ValidValues.Contains(value); // Быстрее IsDefined
// Для непрерывных enum: проверка диапазона
public static bool IsValid(OrderType value) =>
(int)value >= 0 && (int)value <= 1; // Самый быстрый
Microsoft спроектировали это так намеренно, поскольку C# позволяет приводить любое число к типу енамки без ограничений. Это даёт гибкость, но требует от разработчика дополнительной бдительности.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🤩12❤2😁2
С# разработчик на гибрид в СПБ.
Senior Backend Developer от 250 000 ₽.
Web-разработчик на C# с удалёнкой.
C# / .NET-разработчик на удалёнку.
Бустер — Удалённо (в любом городе мира).
Please open Telegram to view this post
VIEW IN TELEGRAM
🍩 Донат разработчикам
Microsoft запустили функцию спонсорства на NuGet.org для финансовой поддержки мейнтейнеров пакетов.
Владельцы пакетов добавляют ссылки через раздел "Manage Packages". Пользователи видят кнопку спонсорства и могут поддержать разработчиков напрямую.
🐸 Библиотека шарписта
#async_news
Microsoft запустили функцию спонсорства на NuGet.org для финансовой поддержки мейнтейнеров пакетов.
Владельцы пакетов добавляют ссылки через раздел "Manage Packages". Пользователи видят кнопку спонсорства и могут поддержать разработчиков напрямую.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤3🎉3😁2
Please open Telegram to view this post
VIEW IN TELEGRAM
💯24😁8🥰4❤2
В кинотеатр пришли люди, и часть мест уже занята.
Места описаны массивом из нулей и единиц:
1 — место занято
0 — место свободно
Нужно найти такое место, чтобы сидящий оказался как можно дальше от ближайшего соседа.
Разбор решения
Нужно рассмотреть три типа промежутков свободных мест:
• Начало ряда — расстояние до ближайшего соседа = количество нулей
• Конец ряда — расстояние = количество нулей
• Середина — расстояние = количество нулей / 2. Целочисленное деление.
Алгоритм
1. Проходим по массиву один раз
2. Отслеживаем индекс последнего человека, которого мы встретили
3. При встрече человека вычисляем расстояние:
• Если это первый человек → берём его индекс (левый край)
• Если не первый → вычисляем (текущий_индекс - прошлый_индекс) / 2
3. После цикла проверяем правый край: n - 1 - последний_индекс
4. Возвращаем максимум из всех расстояний.
Код:
public class Solution {
public int MaxDistToClosest(int[] seats) {
int n = seats.Length;
int maxDist = 0;
int lastPerson = -1;
for (int i = 0; i < n; i++) {
if (seats[i] == 1) {
if (lastPerson == -1) {
// Левый край
maxDist = i;
} else {
// Середина
maxDist = Math.Max(maxDist, (i - lastPerson) / 2);
}
lastPerson = i;
}
}
// Правый край
maxDist = Math.Max(maxDist, n - 1 - lastPerson);
return maxDist;
}
}Задача решается одним проходом за линейное время. Главное — правильно обработать три случая: левый край, середину и правый край.
Чтобы щёлкать такие задачи нужно знать алгоритмы. Подтянуть такую базу поможет наш курс по алгоритмам. До конца октября скидка 40%
#dotnet_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
📁 Создаём директории правильно
Частая задача: нужно убедиться, что папка существует перед сохранением файла. Многие пишут проверку через Directory.Exists, но есть проще.
Идиоматичный способ:
🐸 Библиотека шарписта
#sharp_view
Частая задача: нужно убедиться, что папка существует перед сохранением файла. Многие пишут проверку через Directory.Exists, но есть проще.
Идиоматичный способ:
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
Directory.CreateDirectory идемпотентна — не бросает исключение, если директория уже есть. Метод просто ничего не делает и возвращает DirectoryInfo. Поэтому проверка через Exists избыточна и добавляет лишний вызов файловой системы.Path.GetDirectoryName может вернуть null для корневых путей или некорректных строк. Поэтому null-forgiving оператор ! используется, когда вы точно знаете, что путь валидный. #sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10
📰 Новости недели
Вспоминаем что произошло в мире за последнее время.
— ChatGPT продолжает неудачный додеп
6 ведущих AI-моделей автономно торгуют реальным капиталом на криптовалютных рынках.
— Microsoft Agent Framework в вашем .NET AI-чат приложении
Пошаговое руководство по трансформации простого чат-бота в интеллектуального AI-агента с поддержкой инструментов, многошаговых рассуждений и оркестрации — используя знакомые .NET паттерны
— На одну вакансию теперь 2383 отклика
— Microsoft запустили спонсорство для Nuget разрабов
— Подборка курсов для повышения скиллов
🐸 Библиотека шарписта
#async_news
Вспоминаем что произошло в мире за последнее время.
— ChatGPT продолжает неудачный додеп
6 ведущих AI-моделей автономно торгуют реальным капиталом на криптовалютных рынках.
— Microsoft Agent Framework в вашем .NET AI-чат приложении
Пошаговое руководство по трансформации простого чат-бота в интеллектуального AI-агента с поддержкой инструментов, многошаговых рассуждений и оркестрации — используя знакомые .NET паттерны
— На одну вакансию теперь 2383 отклика
— Microsoft запустили спонсорство для Nuget разрабов
— Подборка курсов для повышения скиллов
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁39💯5
Forwarded from Библиотека собеса по C# | вопросы с собеседований
Опишите разницу между оператором равенства (==) и методом Equals() в C#?
Оператор == и метод Equals() сравнивают два элемента данных типа значения или элемента данных ссылочного типа. Оператор равенства (==) является оператором сравнения, а метод Equals() сравнивает содержимое строки. Оператор == сравнивает ссылочную идентичность, тогда как метод Equals() сравнивает только содержимое.
Библиотека собеса по С#
Библиотека собеса по С#
👍6🌚5🤔3🥱2😁1
🧠 Готовишься к собесам, а ноутбук еле тянет IDE?
Самое время прокачать скиллы и апгрейднуть железо!
Proglib Academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻
Купи любой наш курс до 15 ноября → пройди 2 недели обучения → напиши куратору #розыгрыш. Всё, ты в игре!
📚 Среди курсов:
▫️ Алгоритмы и структуры данных — топ для подготовки к собесам в Яндекс и FAANG.
▫️ Архитектуры и шаблоны проектирования — чтобы думать как senior.
▫️ Python, математика для DS, основы IT и другие направления.
👉 Принять участие
Самое время прокачать скиллы и апгрейднуть железо!
Proglib Academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻
Купи любой наш курс до 15 ноября → пройди 2 недели обучения → напиши куратору #розыгрыш. Всё, ты в игре!
📚 Среди курсов:
▫️ Алгоритмы и структуры данных — топ для подготовки к собесам в Яндекс и FAANG.
▫️ Архитектуры и шаблоны проектирования — чтобы думать как senior.
▫️ Python, математика для DS, основы IT и другие направления.
👉 Принять участие
😁3
List<T> — это универсальный солдат C#. Но универсальный не значит оптимальный. Пока вы перебираете 10 000 элементов через .FirstOrDefault(), Dictionary находит нужное за одно обращение. И это только начало.Queue — когда порядок имеет значение
Обрабатываете задачи по очереди? Вот вам готовое решение:
var tasks = new Queue<UserRequest>();
tasks.Enqueue(new UserRequest { Id = 1, Name = "Alice" });
tasks.Enqueue(new UserRequest { Id = 2, Name = "Bob" });
// Безопасное извлечение (с .NET 6+)
while (tasks.TryDequeue(out var request))
{
await ProcessAsync(request);
}
Первым пришел — первым обработался. Никаких индексов, никаких сортировок.
Stack — для истории действий
Делаете undo/redo или навигацию? Стек решает это из коробки:
var history = new Stack<string>();
history.Push("/home");
history.Push("/products");
history.Push("/cart");
// Вернуться назад
if (history.TryPop(out var lastPage))
{
Console.WriteLine($"Back to: {lastPage}"); // /cart
}
Последнее действие всегда доступно первым. Логика браузерной кнопки «Hазад» готова.
Dictionary — когда нужна скорость
Поиск по ключу за O(1) вместо перебора всего списка:
var users = new Dictionary<int, User>();
users.Add(1, new User { Name = "Alice" });
users.Add(2, new User { Name = "Bob" });
// Безопасная проверка
if (users.TryGetValue(2, out var user))
{
Console.WriteLine(user.Name); // Bob
}
Никаких .FirstOrDefault(x => x.Id == 2) с перебором тысяч записей.
List отлично работает, когда вам нужен доступ по индексу и порядок элементов. Но если задача укладывается в одну из этих трёх структур — используйте их.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱18❤9
💾 Всем фичам фича
Вышло октябрьское обновление 86Box — эмулятора ПК IBM PC. Главное новшество — звуки флоппи-дисководов, записанные с реальных устройств.
Разработчик записал звуки с настоящих 3.5" и 5.25" дисководов. Эмулятор отслеживает активность мотора и головки дисковода в реальном времени и проигрывает соответствующие звуки. Получается достоверная звуковая картина — как будто перед вами настоящее железо из 90-х.
➡️ Полный список изменений
🐸 Библиотека шарписта
#async_news
Вышло октябрьское обновление 86Box — эмулятора ПК IBM PC. Главное новшество — звуки флоппи-дисководов, записанные с реальных устройств.
Разработчик записал звуки с настоящих 3.5" и 5.25" дисководов. Эмулятор отслеживает активность мотора и головки дисковода в реальном времени и проигрывает соответствующие звуки. Получается достоверная звуковая картина — как будто перед вами настоящее железо из 90-х.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Внимание! Вы проживаете аномальную неделю прямо сейчас. Вся неделя сдвинулась на один день и мы снова проживаем понедельник.
Или у нас будет две пятницы. Учёные ещё не определились.
💬 Как вы? Уже устали или ещё полны энергии?
#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥2
Media is too big
VIEW IN TELEGRAM
Не пропусти МТС True Tech Champ — масштабный фестиваль 21 ноября для тех, кто живет технологиями 🔥
Тебя ждут:
▫️ Захватывающая сюжетная линия. Тебя ждет уникальная кибервселенная с возможностью влиять на ход происходящего.
▫️ Конференция с международными спикерами. Эксперты расскажут о трендах в ИИ и инновациях в индустрии.
▫️ ИТ-качалка. Наращивай экспертизу на воркшопах.
▫️ Шоу-финал ИТ-чемпионата. Более 250 талантов со всей России сразятся в лайв-кодинге и программировании роботов на скоростное прохождение лабиринтов со спецэффектами. Выбирай и болей за фаворитов.
▫️ Айтивности. Тебя ждут бои роботов, кодерские челленджи, пайка плат и не только. Заработай True Coins и обменяй их на стильный мерч.
▫️ HR-Hub. Команда МТС расскажет о возможностях для развития в компании и поможет перезагрузить карьерный трек.
▫️ Афтепати со звездными хэдлайнерами. Зажги под популярные хиты.
Когда: 21 ноября, МТС Live Холл в Москве и онлайн.
Регистрируйся на сайте. Участие бесплатно, количество мест ограничено.
Тебя ждут:
▫️ Захватывающая сюжетная линия. Тебя ждет уникальная кибервселенная с возможностью влиять на ход происходящего.
▫️ Конференция с международными спикерами. Эксперты расскажут о трендах в ИИ и инновациях в индустрии.
▫️ ИТ-качалка. Наращивай экспертизу на воркшопах.
▫️ Шоу-финал ИТ-чемпионата. Более 250 талантов со всей России сразятся в лайв-кодинге и программировании роботов на скоростное прохождение лабиринтов со спецэффектами. Выбирай и болей за фаворитов.
▫️ Айтивности. Тебя ждут бои роботов, кодерские челленджи, пайка плат и не только. Заработай True Coins и обменяй их на стильный мерч.
▫️ HR-Hub. Команда МТС расскажет о возможностях для развития в компании и поможет перезагрузить карьерный трек.
▫️ Афтепати со звездными хэдлайнерами. Зажги под популярные хиты.
Когда: 21 ноября, МТС Live Холл в Москве и онлайн.
Регистрируйся на сайте. Участие бесплатно, количество мест ограничено.