C# 或||&引用;语法澄清

C# 或||&引用;语法澄清,c#,C#,在C#中,如果我想检查以确保某个值不等于X或Y,我会这样写: if(x != 1 && x != 2) { //dosomething } 我想看看是否有一种方法可以用AND来写,或者用AND来代替AND。类似这样的事情(虽然不起作用,但我正试图这么做): 显然,这不起作用,因为它试图将1 | | 2作为自己的语句进行求值。有没有正确的书写方法?您可以尝试以下方法: if(!(x == 1 || x == 2)) 但老实说,我不明白这样做的原因 如果(x!=1&&x

在C#中,如果我想检查以确保某个值不等于X或Y,我会这样写:

if(x != 1 && x != 2)
{
     //dosomething
}
我想看看是否有一种方法可以用AND来写,或者用AND来代替AND。类似这样的事情(虽然不起作用,但我正试图这么做):


显然,这不起作用,因为它试图将
1 | | 2
作为自己的语句进行求值。有没有正确的书写方法?

您可以尝试以下方法:

if(!(x == 1 || x == 2))
但老实说,我不明白这样做的原因

如果(x!=1&&x!=2)这个语句比上面的语句更清晰易读,它的作用也是一样的


如果x为1或2,则此
(x==1 | | x==2)
计算结果为true。因此,对其进行否定,就得到了你想要的。

你总是可以将AND转换成OR:

if (!(x == 1 || x == 2))
{
   ...
}
但是,您必须反转所有条件才能执行此操作,如上所述。(谢谢@RichardEverett!)中描述了这样做的过程。

不,C#目前不支持这种构造。 下面是我能得到的最接近的,但是速度很慢

if (!new[] { 1, 2 }.Contains(x)) { ... }

@BradleyDotNET是正确的!我正在看它,当我意识到你点击了你的评论。非常感谢。@RichardEverett谢谢,我知道这个名字,但记不起来了!简单的布尔逻辑是一种有效的替代方法,它意味着您始终可以将此类条件转换为基于OR的语句。
if (!new[] { 1, 2 }.Contains(x)) { ... }