Дневник сертифицированного .NET разработчика. Заметки, советы, новости из мира .NET и C#.
Для связи: @SBenzenko
Поддержать канал:
- https://boosty.to/netdeveloperdiary
- https://patreon.com/user?u=52551826
- https://pay.cloudtips.ru/p/70df3b3b
Post #2025
1.6K
День 1670. #ЗаметкиНаПолях
Неожиданное Поведение Enum.TryParse
Перечисления — это очень простые структуры, но некоторые функции, такие как Enum.TryParse, могут вести себя неожиданно. Сегодня рассмотрим, в чём дело, и как это исправить.
Enum.TryParse «преобразует строковое представление имени или числового значения одной или нескольких перечислимых констант в эквивалентный перечислимый объект. Возвращаемое значение указывает, удалось ли преобразование».
Итак, если у нас есть такое перечисление:
Что делать?
Используйте
Неожиданное Поведение 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 =Источник: https://steven-giesel.com/blogPost/64d479f1-823f-4fc7-a56a-2b1ff06dcf72
Enum.TryParse("3", out Weekend day);
if (couldParse
&& Enum.IsDefined(typeof(Weekend), day))
{
// Только здесь мы уверены в
// корректности значения Weekend
}
- 👍 50



