值在枚举列表中

我有一个相当基本的问题:如何检查给定值是否包含在枚举值列表中?

例如,我有这个枚举:

public enum UserStatus { Unverified, Active, Removed, Suspended, Banned } 

现在我想检查status in (Unverified, Active)

我知道这有效:

 bool ok = status == UserStatus.Unverified || status == UserStatus.Active; 

但必须有一种更优雅的方式来写这个。

这个queston的主题非常相似,但那是处理标志枚举,这不是标志枚举。

提前致谢。

这是一种在很多情况下有很多帮助的扩展方法。

 public static class Ext { public static bool In(this T val, params T[] values) where T : struct { return values.Contains(val); } } 

用法:

 Console.WriteLine(1.In(2, 1, 3)); Console.WriteLine(1.In(2, 3)); Console.WriteLine(UserStatus.Active.In(UserStatus.Removed, UserStatus.Banned)); 

如果它是一个较长的枚举列表,您可以使用:

 var allowed = new List { UserStatus.Unverified, UserStatus.Active }; bool ok = allowed.Contains(status); 

否则无法绕过长|| 谓词,检查每个允许的值。

使用Enum.IsDefined

例:

 public enum enStage {Work, Payment, Record, Return, Reject}; int StageValue = 4; Enum.IsDefined(typeof(enStage), StageValue) 
 UserStatus userStatus = null; Eum.TryParse(status.ToString(), out userStatus); if(userStatus != null) { //it is not in the list } 

为什么不创建一个封装它的方法?

 public bool UnVerifiedOrActive(User user) { return (user.UserStatus == UserStatus.Unverified || user.UserStatus == UserStatus.Active); } 

你可以尝试以下

 UserStatus ustatus; if(Enum.TryParse(c.ToString(), out ustatus)) { ..Your logic }