我基本上有一个枚举
public enum WorkingDays
{
Monday, Tuesday, Wednesday, Thursday, Friday
}
并希望对输入进行比较,输入恰好是字符串
//note lower case
string input = "monday";
我能想出的最好的事情是这样的
WorkingDays day = (from d in Enum.GetValues(typeof(WorkingDays)).Cast<WorkingDays>()
where d.ToString().ToLowerInvariant() == input.ToLowerInvariant()
select d).FirstOrDefault();
有没有更好的方法呢?
编辑:谢谢Aaron&amp;杰森。但是,如果解析失败了怎么办?
if(Enum.IsDefined(typeof(WorkingDay),input))//cannot compare if case is different
{
WorkingDay day = (WorkingDay)Enum.Parse(typeof(WorkingDay), input, true);
Console.WriteLine(day);
}
答案 0 :(得分:10)
您是否尝试将string
转换为WorkingDays
的实例?如果是,请使用Enum.Parse
:
WorkingDays day = (WorkingDays)Enum.Parse(typeof(WorkingDays), "monday", true);
这里我们使用了重载Enum.Parse(Type, string, bool)
,其中bool
参数指示是否忽略大小写。
另外,您应该将WorkingDays
重命名为WorkingDay
。看这样。如果您拥有WorkingDay
的实例,请说明
WorkingDay day = WorkingDay.Monday;
请注意day
是工作日(因此WorkingDay
)而非工作日(因此不是WorkingDays
)。有关命名枚举的其他指南,请参阅Enumeration Type Naming Guidelines。
答案 1 :(得分:2)
Here's非Linq方式。
编辑:这基本上是杰森的方式。他在我面前张贴。给他一点荣誉。答案 2 :(得分:1)
使用IsDefined link text
答案 3 :(得分:0)
我能够通过填充List集合将枚举转换为IQueryable。
// Create list to hold enum values
List<string> WorkingDaysList = new List<string>();
// loop thru enum values and store in List
foreach (var value in Enum.GetValues(typeof(WorkingDays)))
{
var _WorkingDaysList = ((WorkingDays)value).ToString();
WorkingDaysList.Add(_WorkingDaysList);
}
// use linq to query list
var result = (from d in WorkingDaysList where d.ToLower() == input.ToLower() select d).FirstOrDefault();