ram*_*ram 5 .net c# linq enums iqueryable
我基本上有一个枚举
public enum WorkingDays
{
Monday, Tuesday, Wednesday, Thursday, Friday
}
Run Code Online (Sandbox Code Playgroud)
并且想要对输入进行比较,输入恰好是一个字符串
//note lower case
string input = "monday";
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的事情是这样的
WorkingDays day = (from d in Enum.GetValues(typeof(WorkingDays)).Cast<WorkingDays>()
where d.ToString().ToLowerInvariant() == input.ToLowerInvariant()
select d).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
编辑:谢谢Aaron&Jason.但是如果解析失败怎么办?
if(Enum.IsDefined(typeof(WorkingDay),input))//cannot compare if case is different
{
WorkingDay day = (WorkingDay)Enum.Parse(typeof(WorkingDay), input, true);
Console.WriteLine(day);
}
Run Code Online (Sandbox Code Playgroud)
jas*_*son 10
您是否尝试将a转换string为实例WorkingDays?如果是这样使用Enum.Parse:
WorkingDays day = (WorkingDays)Enum.Parse(typeof(WorkingDays), "monday", true);
Run Code Online (Sandbox Code Playgroud)
这里我们使用过载Enum.Parse(Type, string, bool),其中bool参数指示是否忽略大小写.
另外,您应该重命名WorkingDays为WorkingDay.看这样.当你有一个实例时WorkingDay,比方说,
WorkingDay day = WorkingDay.Monday;
Run Code Online (Sandbox Code Playgroud)
请注意,这day是一个工作日(因此WorkingDay)而不是工作日(因此不是WorkingDays).有关命名枚举的其他指南,请参阅枚举类型命名准则.