I basically have an enum
public enum WorkingDays
{
Monday, Tuesday, Wednesday, Thursday, Friday
}
and would like to do a comparison against an input, which happens to be a string
//note lower case
string input = "monday";
The best thing I could come up with was something like this
WorkingDays day = (from d in Enum.GetValues(typeof(WorkingDays)).Cast<WorkingDays>()
where d.ToString().ToLowerInvariant() == input.ToLowerInvariant()
select d).FirstOrDefault();
Is there any better way to do it ?
Edit: Thanks Aaron & Jason. But what if the parse fails ?
if(Enum.IsDefined(typeof(WorkingDay),input))//cannot compare if case is different
{
WorkingDay day = (WorkingDay)Enum.Parse(typeof(WorkingDay), input, true);
Console.WriteLine(day);
}
Are you trying to convert a string
to an instance of WorkingDays
? If so use Enum.Parse
:
WorkingDays day = (WorkingDays)Enum.Parse(typeof(WorkingDays), "monday", true);
Here we are using the overload Enum.Parse(Type, string, bool)
where the bool
parameter indicates whether or not to ignore case.
On a side note, you should rename WorkingDays
to WorkingDay
. Look at like this. When you have an instance of WorkingDay
, say,
WorkingDay day = WorkingDay.Monday;
note that day
is a working day (thus WorkingDay
) and not working days (thus not WorkingDays
). For additional guidelines on naming enumerations, see Enumeration Type Naming Guidelines.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With