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

标签 c# loops if-statement modulo

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

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

我知道模数在做什么,但为什么这段代码后面有 ==0?例如,为什么不这样编码:

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

最佳答案

因为number%5是0到4之间的整数,而number%5==0是 bool 值。与 C/C++ 等语言不同,整数可以被视为 bool 值(例如 0 -> false,1 -> true),在 C# 中,if 的条件必须是“真实” bool 值。

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

编辑:正如 Eric Lippert 在评论中所说,在 if 条件中使用 bool 的替代方法是使用实​​现 implicit operator bool 作为转换或实现运算符 truefalse,例如 http://msdn.microsoft.com/en-us/library/6x6y6z4d.aspx .但据我所知,除了 bool 之外,没有任何原语满足这两个条件。

关于c# - 为什么模运算的结果不能直接用在 if 语句中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16929329/

相关文章:

java if语句错误

javascript - FOR 循环内的嵌套 IF 仅适用于第一个值

c# - 属性与公共(public)成员变量

c# - 自定义引用循环处理

python - if 语句每次都采用相同的路径;可能的 str v. int 冲突

loops - 遍历 Haskell 中的两个变量

javascript - 如何在数组中循环每个 idx 的对象属性?

c# - 如何在 C# 中实现 setInterval(js)

c# - 在 C# 中点采购 powershell 脚本不起作用

java - 仅当相似项目不在列表中时才将项目添加到 ArrayList