TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #2025 1.6K
День 1670. #ЗаметкиНаПолях
Неожиданное Поведение Enum.TryParse
Перечисления — это очень простые структуры, но некоторые функции, такие как Enum.TryParse, могут вести себя неожиданно. Сегодня рассмотрим, в чём дело, и как это исправить.

Enum.TryParse «преобразует строковое представление имени или числового значения одной или нескольких перечислимых констант в эквивалентный перечислимый объект. Возвращаемое значение указывает, удалось ли преобразование».

Итак, если у нас есть такое перечисление:
public enum Weekend
{
Saturday = 0,
Sunday = 1
}

И мы вызываем функцию:
var couldParse = 
Enum.TryParse("1", out Weekend day);

Console.WriteLine($"Удача: {couldParse}");
Console.WriteLine($"Значение: {day}");

//Вывод:
Удача: True
Значение: Sunday

Пока всё нормально, но вот что интересно. Если вы укажете значение, которое не является частью перечисления, это всё равно будет работать:
var couldParse = 
Enum.TryParse("3", out Weekend day);

//Вывод:
Удача: True
Значение: 3

И хотя «Значение: 3» может иметь смысл, так как вы также можете делать вещи, вроде
var myValue = (WeekendDay)3;
кажется странным, что функция возвращает true и сообщает, что смогла без проблем преобразовать аргумент.

Что делать?
Используйте Enum.IsDefined, чтобы проверить, находится ли данное значение в правильном диапазоне. С помощью Enum.IsDefined мы можем проверить, правильно ли значение для данного перечисления.
var couldParse = 
Enum.TryParse("3", out Weekend day);
if (couldParse
&& Enum.IsDefined(typeof(Weekend), day))
{
// Только здесь мы уверены в
// корректности значения Weekend
}

Источник: https://steven-giesel.com/blogPost/64d479f1-823f-4fc7-a56a-2b1ff06dcf72
  • 👍 50
More from @netdeveloperdiary
  1. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  2. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  3. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  4. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  5. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  6. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →