C# 或者在IF语句中工作不正常

C# 或者在IF语句中工作不正常,c#,if-statement,C#,If Statement,我在Windows Form C#程序中的IF语句(在foreach循环中)中有以下Or条件: 即使splittedFile.Count()为3或4,它也始终会继续。 问题是,如果我删除或条件: if ((splittedFile.Count() != 4)) continue; 它工作正常!!你知道为什么吗?这是正确的行为,你需要使用&& 原因是计数是固定的,比如说n。现在条件是: n不是3或n不是4 给定n为4,这意味着它不是3,因此测试成功,反之亦然 编译器无法检测到这一点,因为

我在Windows Form C#程序中的IF语句(在foreach循环中)中有以下Or条件:

即使
splittedFile.Count()
为3或4,它也始终会继续。 问题是,如果我删除或条件:

if ((splittedFile.Count() != 4))
    continue;

它工作正常!!你知道为什么吗?

这是正确的行为,你需要使用
&&

原因是计数是固定的,比如说n。现在条件是:

n不是3或n不是4

给定n为4,这意味着它不是3,因此测试成功,反之亦然

编译器无法检测到这一点,因为在两个
if
语句之间,
Count()
可能会更改(例如,在多线程设置中,第二个线程将向集合中添加/删除某些内容)。不过,我同意一些分析工具在某些情况下能够检测到这种琐碎的行为。然而,由于赖斯定理,这种分析通常无法实现

如果使用
&&
,则表达式如下:

n不是3,n也不是4


因此,这两个条件都应该成立。换句话说,只有当n小于3且大于4时,该条件才成立。

因为您的一个表达式将始终为
true
。这就是为什么
true | | something
总是返回
true

让我们分析一下您的
splittedFile.Count()
3
4
和其他值

  • 对于
    3
    ,表达式将为
    false | | true
    ,并返回
    true
  • 对于
    4
    ,表达式将为
    true | | false
    ,并返回
    true
  • 对于非
    3
    4
    ,表达式将为
    true | | true
    ,并返回
    true
强烈怀疑您正在寻找的是哪一个提供的。

请尝试:

if ((splittedFile.Count() != 3) && (splittedFile.Count() != 4)) 
    continue; 

我知道
|
听起来合乎逻辑,因为:
如果splittedFile.count不是3或不是4,那么继续但是因为有两个不是
运算符和
&&
是必需的。

在表达式中输入实数:

if( 3 != 3 || 3 != 4)
那是

if( false || true )
表达式将始终为true,因为
splittedFile.Count()
始终是
(不是3)或(不是4)

您希望将结果一起
&
,如下所示

(x!=3)|(x!=4)


!(x==3 | | x==4)

没有办法将其计算为false。如果
splittedFile.Count()==3
splittedFile.Count()!=4
反之亦然。周一早上8点:)哈哈哈,没错@CalvinSmith
if( false || true )