C# 或者在IF语句中工作不正常
我在Windows Form C#程序中的IF语句(在foreach循环中)中有以下Or条件: 即使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,因此测试成功,反之亦然 编译器无法检测到这一点,因为
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 )