如何检查字符串值是否在枚举列表中?

qin*_*126 83 c# c#-3.0 c#-4.0

在我的查询字符串中,我有一个年龄变量 ?age=New_Born.

有没有办法可以检查这个字符串值New_Born是否在我的枚举列表中

[Flags]
public enum Age
{
    New_Born = 1,
    Toddler = 2,
    Preschool = 4,
    Kindergarten = 8
}
Run Code Online (Sandbox Code Playgroud)

我现在可以使用if语句,但是如果我的枚举列表变大了.我想找到一个更好的方法来做到这一点.我正在考虑使用Linq,只是不知道该怎么做.

Aar*_*onS 139

您可以使用:

 Enum.IsDefined(typeof(Age), youragevariable)
Run Code Online (Sandbox Code Playgroud)

  • 请记住,`Enum.IsDefined()`区分大小写!所以这不是一个"通用的解决方案". (8认同)
  • 通常建议不要使用IsDefined,因为Is使用反射,在性能和CPU方面调用IsDefined是一个非常昂贵的调用.请改用TryParse.(从pluralsight.com获悉) (6认同)

Joh*_*ner 38

您可以使用Enum.TryParse方法:

Age age;
if (Enum.TryParse<Age>("New_Born", out age))
{
    // You now have the value in age 
}
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于.NET 4 (4认同)
  • 这个问题是,如果你提供任何整数(而不是你的"New_Born"字符串,我的意思是它)将返回true. (2认同)

Oma*_*mar 9

如果成功,您可以使用返回true 的TryParse方法:

Age age;

if(Enum.TryParse<Age>("myString", out age))
{
   //Here you can use age
}
Run Code Online (Sandbox Code Playgroud)