【问题标题】:CS0019 Operator '+=' cannot be applied to operands of type 'int' and 'bool' [closed]CS0019 运算符“+=”不能应用于“int”和“bool”类型的操作数 [关闭]
【发布时间】:2017-09-21 18:48:05
【问题描述】:

我目前正在编写一个简单的骰子游戏,我遇到了一个让我感到困惑的错误,这是我的代码。

foreach (var die in Dice.rolls)
{
    Console.WriteLine(die.ToString());
}
if (player.score += score >= goal)
{
    playing = false;
    Console.WriteLine("{0} has won the game!", player.name);
    Console.WriteLine("Please press any key to end the game");
    Console.ReadKey();
}
else
{
    player.score += score;
}

我遇到的问题是这条线:

if (player.score += score >= goal)

抛出一个错误,告诉我不能在 int 和 bool 上使用它,但 if 语句中的所有变量都是 int。此外,这里还有几行:

player.score += score;

没有给我任何错误。

【问题讨论】:

  • 您不能在同一行中执行这两项操作。只需先添加分数,然后进行比较。您告诉编译器要做的是解决 score >= goal 并将其添加到 player.score,从而出现错误。

标签: c# runtime-error operators


【解决方案1】:

可能是操作的优先级吗?试试:

if ( (player.score += score) >= goal)

不过,在我看来,您应该: a) 把它分成两行:

player.score += score;
if (player.score >= goal)

或 b) 将行更改为:

if (player.score + score > goal)

就目前而言,也许这是故意的,如果不是 >= 目标,player.score 最终会添加两次分数,因为它将作为 if 的一部分添加,然后作为主体添加其他的。

【讨论】:

  • 是的,这是行动的优先事项,干杯朋友
  • 把它分成两行要清楚得多。尝试编写简洁的代码,在一行中递增和检查变量,这可能会成为未来错误的来源。
【解决方案2】:

这是运算符优先级的问题。比较运算符 >= 具有更高的优先级,因此实质上您是在尝试通过布尔比较 score >= goal 的结果来增加 player.score

您可以使用括号来解决此问题或简化您的表达式,例如

player.score += score;
if (player.score >= goal)

您可以在这里查看更多信息https://msdn.microsoft.com/en-us/library/2bxt6kc4.aspx

【讨论】:

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