You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断整数是否存在于指定枚举值列表的对应整数值集合中?

解决枚举集合与整数值的类型匹配判断问题

问题背景

现有枚举定义:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:55:16