运营商||不能应用于bool和int类型的操作数

时间:2013-12-09 18:27:40

标签: c# logical-operators

我今天早上遇到了一个奇怪的问题让我想知道为什么突然发生这种类型的错误,例如看一下这段代码:

    if(age == 0 || age == 47 || age = 99)
    {
        name = "Those are lucky numbers!";
    }
    else
    {
        name = "Try again...";
    }

错误是:错误CS0019:运算符'||'不能应用于'bool'和'int'类型的操作数。

什么......?呵呵......我的意思是类型'bool'和'int'是我们想要用于这种操作的最常见的类型。他们为什么不工作?

此外,我确信我之前已经完成了数千次这样的事情,我不明白为什么今天它会发生......或者我可能用Ruby语言做到了这一点。我仍然真的有C#之前的感受。

任何人都有合理的解释吗?我今天想念的东西? :d

4 个答案:

答案 0 :(得分:8)

您的上一个年龄需要一秒=才能进行比较

 if(age == 0 || age == 47 || age == 99)

你有age = 99

答案 1 :(得分:4)

条件的最后一个组成部分age = 99评估为int,而不是bool,因为您使用了赋值运算符=,而不是相等运算符==

答案 2 :(得分:2)

  

我的意思是类型'bool'和'int'是我们想要执行此类操作的最常见类型

不。

该错误表示你不能写true || 42之类的东西 这没有任何意义。

您的实际问题是age = 9 分配,而非比较

答案 3 :(得分:2)

您的意思是age == 99,而不是age = 9

age = 9是一个评估为9的表达式,其副作用是将变量age设置为9。因此,您可以执行a = (age = 99)之类的操作,a(如果已将其声明为int)将设置为99

这就是为什么您的错误消息抱怨将int传递给||

一种调试策略是在多行上写出来:

if( a ||
    b ||
    c)

这将隔离您的错误抱怨的操作员。在这种情况下,您可能已经看到了错误。