检查整数类型是否属于枚举成员
我想检查一些整数类型属于(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