【问题标题】:Cannot implicitly convert type 'ulong' to 'bool'无法将类型“ulong”隐式转换为“bool”
【发布时间】:2015-05-07 20:37:03
【问题描述】:

我得到这个错误:

无法将类型“ulong”隐式转换为“bool”

在这里(u*u)for (ulong u = 2; u * u; u++)

下面的代码块。

static bool IsPrime(ulong Num)
{
     if (Num < 2) return false;
     else if (Num < 4) return true;
     else if (Num % 2 == 0) return false;
     for (ulong u = 2; u * u; u++)
         if (Num % u == 0) return false;
     return true;
}

【问题讨论】:

  • 错误不明白怎么办?你有 u*u 需要一个布尔值,这不是一个布尔值。如果你问我是否理解你的问题,我回复42你会怎么想?
  • for 语法的第二部分决定了循环的停止条件。它必须是一个布尔值。您可能正在寻找u &lt; (u*u);
  • @NateBarbettini 您提到的条件只有在u0 或乘法溢出时才成立。
  • @Servy 呃,你是对的。读得太快了,没想到。我认为 Mehrzad Chehraz 说得对。
  • 感谢所有输入的家伙,你的速度非常快:)

标签: c# primes


【解决方案1】:

检查MSDN about 关键字:

每个 for 语句都定义了初始化器、条件和迭代器 部分。这些部分通常决定循环的次数 迭代。

所以第二部分是一个条件,必须隐式转换为布尔值。由于无法隐式转换 long 类型,因此会出现编译时错误。 我想这就是你想要做的:

static bool IsPrime(ulong Num)
{
   if (Num < 2)
        return false;
   else if (Num < 4)
        return true;
   else if (Num % 2 == 0)
        return false;
   for (ulong u = 2; u * u < Num; u++)
       if (Num % u == 0)
          return false;
   return true;
}

【讨论】:

  • 是的,这正是我所缺少的。有什么东西敲响了关于某种情况的钟声,但我就是不知道在哪里。非常感谢您解决问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多