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

C# switch表达式搭配or模式与带条件默认卫句的行为疑问

C# switch 表达式带or模式与卫句的行为说明

核心原因

C# 中 when 卫句的作用范围是其所属分支的整个左侧模式集合,而非仅绑定到 or 运算符右侧的单个模式。你示例中的分支代码:

"d" or _ when types.Contains(input) => "1"

实际的执行判断逻辑等价于:

先判断输入是否匹配左侧模式(等于 "d" 或者匹配任意值,该部分永远返回真),同时满足 types.Contains(input) 条件,才会命中该分支。

对应等效的普通if逻辑:

if ((input == "d" || true) && types.Contains(input))

你的测试输入为 "d",但 types 集合中仅存储了 "a"、"b"、"c",不包含 "d",因此卫句条件不成立,该分支无法命中,最终进入默认分支返回 "2",和你实际运行结果一致。

符合预期的写法

如果要实现「输入等于 "d" 或输入存在于 types 集合中就命中对应分支」的逻辑,可采用以下两种写法:

写法1:拆分独立分支

var result = input switch {
    "d" => "1",
    _ when types.Contains(input) => "1",
    _ => "2"
};

写法2:卫句中合并判断逻辑

var result = input switch {
    _ when input == "d" || types.Contains(input) => "1",
    _ => "2"
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:57:04