或者在IF声明中不能正常工作

时间:2014-12-22 13:54:36

标签: c# if-statement

我在Windows Form C#程序的IF语句(在foreach循环中)中有这个或者条件:

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

并且始终continue,即使splittedFile.Count()为3或4。 问题是,如果我删除Or条件:

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

它运作正常!!有什么想法吗?

4 个答案:

答案 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() 34以及这些值以外的其他值。

  • 对于3,您的表达式为false || true,并返回true
  • 对于4,您的表达式为true || false,并返回true
  • 除了34之外,您的表达式将为true || true,并返回true

强烈怀疑您正在寻找提供&& operatorlogical-AND