我在Windows Form C#程序的IF语句(在foreach循环中)中有这个或者条件:
if ((splittedFile.Count() != 3) || (splittedFile.Count() != 4))
continue;
并且始终continue
,即使splittedFile.Count()
为3或4。
问题是,如果我删除Or条件:
if ((splittedFile.Count() != 4))
continue;
它运作正常!!有什么想法吗?
答案 0 :(得分:4)
这是正确的行为,您需要使用&&
。
原因是计数是固定数字,比方说 n 。现在条件是:
n 不是3或 n 不是4。
鉴于 n 为4,这意味着它不是3,因此测试成功,反之亦然。
编译器无法检测到这一点很简单,因为在两个if
语句之间,Count()
可能会更改(例如在多线程设置中,其中第二个线程会在集合中添加/删除某些内容。但我同意一些分析工具能够在某些条件下检测这种微不足道的行为。但一般情况下,由于赖斯定理,这种分析无法实现。
如果您使用&&
,则表达式为:
n 不是3 且 n 不是4。
因此两种情况都应该是正确的。换句话说,只有当 n 小于3且大于4时,条件才会成立。
答案 1 :(得分:2)
尝试:
if ((splittedFile.Count() != 3) && (splittedFile.Count() != 4))
continue;
我知道||
听起来合乎逻辑,因为:if splittedFile.count is not 3 OR it is not 4 then continue;
但是因为if表达式中有2个NOT !
运算符,因此需要AND &&
。
答案 2 :(得分:2)
在表达式中加上一个实数:
if( 3 != 3 || 3 != 4)
是
if( false || true )
您的表达始终为真,因为splittedFile.Count()
始终为(not 3) or (not 4)
您想要&&
您的结果,看起来像
(x != 3) || (x != 4)
或
!( x == 3 || x == 4)
答案 3 :(得分:1)
因为您的某个表达式总是 true
。这就是为什么true || something
总是返回true
。
让我们分析一下您的splittedFile.Count()
3
,4
以及这些值以外的其他值。
3
,您的表达式为false || true
,并返回true
。4
,您的表达式为true || false
,并返回true
。3
或4
之外,您的表达式将为true || true
,并返回true
。强烈怀疑您正在寻找提供&&
operator的logical-AND。