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

.NET 6中如何用紧凑if语句实现非布尔类型的多值比较

在.NET 6中实现枚举/数值类型的紧凑多值判断

直接用a || b的写法行不通,因为||是布尔逻辑运算符,会先把枚举/数值类型转换成布尔值(非零为true,零为false),最终得到的是布尔结果,没法和原类型的变量做相等判断。针对你的枚举场景,有几种紧凑的实现方式:

方式1:使用集合的Contains方法

把要判断的枚举值放进临时集合,用Contains完成判断,代码简洁直观:

if (new[] { Animal.Dolphin, Animal.Whale }.Contains(choice))
{
    Console.WriteLine("Lives in the sea");
}

如果需要重复使用该判断逻辑,可将集合定义为静态只读变量,避免每次创建新集合:

private static readonly HashSet<Animal> SeaAnimals = new() { Animal.Dolphin, Animal.Whale };

// 使用时
if (SeaAnimals.Contains(choice))
{
    Console.WriteLine("Lives in the sea");
}

方式2:使用模式匹配(.NET 6+支持)

利用.NET 6增强的模式匹配语法,直接在if条件中写多值匹配,语法最紧凑:

if (choice is Animal.Dolphin or Animal.Whale)
{
    Console.WriteLine("Lives in the sea");
}

这种写法无需额外创建集合,是.NET 6及以后推荐的简洁实现方式,可读性与性能表现都很出色。

方式3:按位或(仅适用于标记枚举)

如果你的枚举是标记枚举(需用[Flags]特性修饰,且枚举值为2的幂),可以用按位或|配合按位与&判断,但当前Animal枚举不符合标记枚举定义,因此该方式不适用。若后续调整为标记枚举,写法如下:

[Flags]
enum Animal : byte {
    Cat = 1,
    Dog = 2,
    Cow = 4,
    Dolphin = 8,
    Horse = 16,
    Whale = 32   
}

// 判断逻辑
if ((choice & (Animal.Dolphin | Animal.Whale)) != 0)
{
    Console.WriteLine("Lives in the sea");
}

综上,最适配你场景的是模式匹配的is ... or ...写法,完全满足你想要的紧凑if语句需求,无需使用switch。

内容的提问来源于stack exchange,提问作者Serge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:15:05