使用模式匹配来检测x不是a或不是b

问题描述 投票:0回答:1

我需要检查某个值是否不是一个或另一个,并且我想将

or
与模式匹配一起使用。 “前进” -
x is a or b
很简单:

int GetInt() => 3;

if (GetInt() is 3 or 4)
{
    Console.WriteLine("3 or 4");
}

但否定我无法弄清楚。我试过:

if (GetInt() is not 4 or 3)
{
    Console.WriteLine("not 3 or 4 #1");
}
else
{
    Console.WriteLine("Succcess");
}

或者

if (GetInt() is not 3 or not 4)
{
    Console.WriteLine("not 3 or 4 #2");
}
else
{
    Console.WriteLine("Succcess");
}

但是两者都打印第一个语句(

not 3 or 4...
)。

IDE 还将代码的不同部分灰显:

c# pattern-matching
1个回答
2
投票

您可以只使用括号:

if (GetInt() is not (3 or 4))
{
    Console.WriteLine("not 3 or 4 #2");
}
else
{
    Console.WriteLine("Success");
}

演示 @sharplab.io

© www.soinside.com 2019 - 2024. All rights reserved.