为什么不能直接在if语句中使用模运算的结果?

时间:2013-06-04 23:53:28

标签: c# loops if-statement modulo

我正在从一本书中挑战,它要求我创建一个从20到0倒计时的循环,并让我为每个数字打印一条消息。但是,它要求我为每个可被5整除的数字打印一条特殊信息。我已经看到了一些例子,包括这个:

if (number%5==0)
{
    //your code here
}

我得到了modulo正在做的事情,但为什么这段代码后面有==0?例如,为什么不像这样编码:

if (number%5)
{
    //your code here
}

1 个答案:

答案 0 :(得分:3)

因为number%5是0到4之间的整数,而number%5==0是布尔值。与C / C ++这样的语言不同,其中整数可以被认为是布尔值(例如0 - > false,1 - > true),在C#中,if的条件必须是'real'布尔值。

(即使C#允许你在if条件下使用整数,你建议的代码更改是不正确的。如果数字%5为0,前一段代码将运行你的代码,后一段代码将运行你的代码数字%5不为0时的代码。)

编辑:正如Eric Lippert在评论中所说,在bool条件中使用if的替代方法是使用实​​现implicit operator bool的东西作为强制转换或实现运算符{{ 1}}和true,例如http://msdn.microsoft.com/en-us/library/6x6y6z4d.aspx。但据我所知,除了false之外,没有任何基元满足其中任何一个。