检查整数类型是否属于枚举成员

我想检查一些整数类型属于(a)枚举成员。

例如,

public enum Enum1 { member1 = 4, member2 = 5, member3 = 9, member4 = 0 } 

Enum1 e1 =(Enum1)4给我member1

Enum1 e2 =(Enum1)10什么都没给我,我想检查一下。

使用Enum.IsDefined

 Enum.IsDefined(typeof(Enum1), 4) == true 

 Enum.IsDefined(typeof(Enum1), 1) == false 

正如Sam所说,你可以使用IsDefined。 这有点尴尬。 您可以查看我的Unconstrained Melody图书馆,它可以让您:

 Enum1 e2 = (Enum1)10; if (e2.IsNamedValue()) // Will return false { } 

单个枚举调用可能不值得,但如果你用枚举做了很多东西,你可能会发现一些有用的东西。

它应该比Enum.IsDefined btw更快。 它目前只进行线性扫描,但请告诉我你是否需要改进:)(大多数枚举都足够小,以至于他们可能不会从HashSet获益,但我们可以进行二分搜索…… )

 int testNum = 5; bool isMember = Enum.GetValues(typeof(Enum1)).Cast().Any(x => x == testNum); 

您查看枚举的值并将它们与整数进行比较。

  static bool EnumTest(int testVal, Enum e) { bool result = false; foreach (var val in Enum.GetValues(typeof(Enum1))) { if ((int)val == testVal) { result = true; break; } } return result; } 

编辑 :看起来Sam有更好的解决方案 。

您可以使用Enum.GetValues获取所有已定义的值。 然后检查您的值是否存在于该列表中。
http://msdn.microsoft.com/en-us/library/system.enum.getvalues.aspx