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

C#模式匹配中如何正确实现x不是a或不是b的判断?

C#模式匹配实现否定多值判断的正确方式

你遇到的问题源于逻辑运算符优先级和逻辑规则的误解,先拆解两种错误写法的问题:

  • 第一种写法 GetInt() is not 4 or 3:not 的优先级高于 or,实际等价于 (GetInt() is not 4) or (GetInt() is 3)。当返回3时,3 is 3 为true,因此整个条件成立,触发第一个分支。
  • 第二种写法 GetInt() is not 3 or not 4:逻辑上等价于“不是3,或者不是4”——对整数来说,任何数都不可能同时是3和4,所以这个条件永远为true,IDE会置灰无效代码,且永远走第一个分支。

正确实现方式

如果你需要判断值既不是3也不是4(即否定“是3或4”的正向判断),需要用括号将多值模式分组,再用not否定:

int GetInt() => 3;

if (GetInt() is not (3 or 4))
{
    Console.WriteLine("既不是3也不是4");
}
else
{
    Console.WriteLine("是3或者4");
}

当GetInt()返回3时,条件不成立,会进入else分支输出“是3或者4”,符合预期。

如果你的需求确实是逻辑上的“不是3 或者 不是4”,第二种写法逻辑本身是对的,但因为该条件永远为真,所以没有实际业务价值,IDE会提示无效代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:13:26