【问题标题】:Why does c# "&&" operator give this error of "cannot be applied to operands of type 'bool' and 'int'"为什么c#“&&”运算符会出现“不能应用于'bool'和'int'类型的操作数”的错误
【发布时间】:2020-11-27 08:31:03
【问题描述】:

BH 我不知道为什么我在输入以下代码或其变体时不断收到此错误:

        int age = 20;
        int score = 49;
        int crazy = 100;
        if (age = 20 && score  < 50 || score > 95) {
            Console.WriteLine("Welcome");     }

这是错误:错误 CS0019:运算符“&&”不能应用于“int”和“bool”类型的操作数

在这个美妙的社区中有人可以帮忙吗?谢谢!

【问题讨论】:

  • 比较的是 == 而不是 =。并使用括号。 ((age == 20) &amp;&amp; (score &lt; 50)) || (score &gt; 95)...还是等等,你的意思是(age == 20) &amp;&amp; ((score &lt; 50) || (score &gt; 95))

标签: c# operators


【解决方案1】:

这里要注意的是,当 C# 进行赋值(将值放入变量中)时,它也会返回被赋值的值。这个:

age = 20

返回一个值,20

你可以在另一个作业中使用它:

score = age = 20;

Age 是 20,因为我们给它赋值,它返回 20。Score 也是 20,因为我们给它赋值 (age=20)。分配(分配年龄的结果)到 score 也返回一个值.. 我们可以永远这样下去:

a=b=c=d=e=f...=x=y=z=20; //all 26 variables now have a value of 20 

我们可以将返回值视为总和的元素,就像其他任何元素一样:

score = (age = 20) + 1;

将 20 分配给年龄,将 21 分配给得分,并返回 21


我们可以改变类型,就像我们可以说myString = 20.ToString()(是的,你可以像在变量上一样调用常量上的方法)我们可以这样说:

myString = (score = (age = 20) + 1).ToString();

将 20 分配给年龄,21 分配给得分,然后将返回的 21 转换为字符串并将“21”分配给 myString

--

好吧,够傻的了.. 但希望你能明白为什么

if(age = 20 && score < 50)

正在给出它所做的错误。 age 设置为 20,正在返回 20,并且正在使用 (score&&ed,这是一个返回布尔值的操作。这意味着就像你写的一样:

age = 20;
if(20 && score < 50)

简单明了是行不通的。干得好,这不是 JavaScript。

当然,您很可能想使用== 进行年龄比较,而不是使用= 进行作业。

..请记住,赋值也会产生值,这就是这个看起来很疯狂的循环起作用的原因:

while(null != x = stream.Read()) //loop while Read() doesn't return null
{
  //use x, which certainly has a non null value 
}

不过,在使用复合赋值和比较语句时,我会谨慎行事 - 它们的可读性远低于逐步拼写这些内容:

for(x = stream.Read(); x != null; x = stream.Read())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多