为什么这个号码被检测为bool?

时间:2013-05-13 15:24:03

标签: c# if-statement numbers operators relational

我正在检查0和-0.2之间的值是否如此:

float value = -0.1;
if (0 < value > -0.2f) { }

但我收到错误operator '>' cannot be applied to operands of type 'bool' and 'float'。我知道,我可以通过其他方式使用&&运算符来判断句子,但我想知道,为什么它会被检测为bool?

5 个答案:

答案 0 :(得分:7)

看看这个:

0 < value > -0.2f

首先评估0 < value,它返回bool值然后尝试将bool与浮点数-0.2f进行比较,因此它返回错误,因为它是不允许的。

您想要检查值是否更小以及值是否大于,所以这就是您想要做的:

if (0 < value && value > -0.2f) { }

答案 1 :(得分:4)

float value = -0.1;
if (0 < value > -0.2f) { }

因为你需要分开比较

大多数语言从左到右工作

0 < value 

将首先进行评估。这个布尔值

的结果

现在你的表达式为

boolean > -0.2f

这显然不起作用。你需要

if (0 < value && value > -0.2f)

&安培;&安培;是一个'逻辑和',它将逻辑计算的结果组合到它的左右两边

答案 2 :(得分:1)

这是因为if语句的构造。试试这个:

if (0 < value && value > -0.2f) { }

你所写的内容相当于:

if ((0 < value) > -0.2f) { }

正在评估0 < value比较,返回一个布尔值,然后成为第二次比较的操作数。并且,正如错误消息所示,您不能使用>来比较布尔值和浮点数。

答案 3 :(得分:0)

由于操作顺序

基本上,编译器将if编译成这样的东西:

if ((0 < value) > -0.2f)

结果是比较boolint,这是不好的。

请改为尝试:

if (0 < value && value > 0.2f)

答案 4 :(得分:0)

你的if语句在语法上是不正确的。它需要在大括号之间使用布尔表达式。

http://msdn.microsoft.com/en-us/library/vstudio/5011f09h.aspx

if (0 < value > -0.2f) { }

您的语句解析如下:

if ((0 < value) > -0.2f) { }

(0 < value)计算布尔表达式。你试图将它与浮点数进行比较。因此错误。

正如您自己建议的那样,正常的方法是使用&&