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

Chr*_*ith 5 c# loops if-statement modulo

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

if (number%5==0)
{
    //your code here
}
Run Code Online (Sandbox Code Playgroud)

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

if (number%5)
{
    //your code here
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*shu 5

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

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

bool编辑:正如埃里克·利珀特(Eric Lippert)在评论中所说,在条件中使用 a 的另一种方法if是使用implicit operator bool作为强制转换实现或实现运算符true和的东西false,例如http://msdn.microsoft.com/en-us/library/ 6x6y6z4d.aspx。但据我所知,除了bool满足这两个条件之外,没有任何原语可以满足。

  • 你的回答很好,但有一个小错误。从技术上讲,C# 不要求“if”的条件为“bool”类型。相反,它要求*要么*(1)条件可以*隐式转换*为“bool”,或者(2)条件表达式实现一个“operator true”,该运算符从给定表达式生成“bool”。顺便说一句,“while”和所有其他基于布尔值分支的结构也是如此。 (4认同)