Попробуйте
string s = "0";
Days day = (Days)Enum.Parse(typeof(Days), s);
или
string s = "0";
Days day;
if(!Enum.TryParse(s, out day)) {
// error handling
}
, чтобы изящно обработать случай, когда s
не может быть проанализирован для экземпляра Days
.
Это работает в соответствии с документацией для Enum.Parse
, которая гласит
Преобразует строковое представление имени или числового значения одного или несколькихперечислимые константы для эквивалентного перечислимого объекта .
Кроме того, вы можете проверить, действительно ли экземпляр string
представляет значение, определенное перечислением, с помощью
string s = "3";
bool defined = Enum.IsDefined(typeof(Days), s);
// defined is false
В этом случае Enum.Parse
будет анализировать вслепую s
, даже если он не представляет значение, определенное перечислением Days
, и преобразование с результатом Enum.Parse
в Days
не завершится неудачей.
Кроме того, есть встроенное перечисление, которое представляет дни недели.Это перечисление System.DayOfWeek
.Я бы предложил использовать это.
Наконец, если по какой-то причине вы не можете использовать System.DayOfWeek
, вам следует как минимум переименовать ваше перечисление в Day
вместо Days
(уберите множественное число).Только перечисления, которые представляют флаги, должны быть множественными.Обратите внимание, что переменная day
выше представляет день, а не дни.Вот почему вы должны переименовать enum в Day
.Это соответствует соглашениям об именах , которые используют большинство программистов на C # и .NET.