如何判断整数是否存在于指定枚举值列表的对应整数值集合中?
解决枚举集合与整数值的类型匹配判断问题
问题背景
现有枚举定义:
public enum MyEnums { A = 1, B = 2, C = 3, D = 4, E = 5 }
创建了包含部分枚举值的集合:
IEnumerable<MyEnums> myEnums = new(){ MyEnums.A, MyEnums.B, MyEnums.C };
需要判断整数x.MyValue是否对应集合中枚举成员的整数值,但原代码query.Where(x => myEnums.Contains((int)x.MyValue))因类型不匹配无法执行(Contains方法期望接收MyEnums类型参数,传入的却是int)。
解决方案
方案1:将整数转换为枚举类型后判断
直接把整数强制转换为对应的枚举成员,就能和集合的类型匹配:
// 基础写法(适用于确定x.MyValue是有效枚举值的场景) query.Where(x => myEnums.Contains((MyEnums)x.MyValue))
如果x.MyValue可能存在不在枚举定义范围内的整数,建议增加有效性校验,避免转换异常:
// 安全写法:先验证整数是否为有效枚举值 query.Where(x => Enum.IsDefined(typeof(MyEnums), x.MyValue) && myEnums.Contains((MyEnums)x.MyValue))
方案2:预先将枚举集合转为整数集合
如果需要多次进行这类判断,建议先把枚举集合转换成整数集合(用HashSet能提升查找性能):
// 提前转换为整数HashSet,复用性更高、查找更快 HashSet<int> myEnumIntValues = new HashSet<int>(myEnums.Select(e => (int)e)); // 直接判断整数是否在集合中 query.Where(x => myEnumIntValues.Contains(x.MyValue))
内容的提问来源于stack exchange,提问作者user7849697
相关产品推荐
相关产品推荐

