for循环中检测到无法访问的代码

时间:2014-11-21 17:53:11

标签: c# for-loop return-value unreachable-code

我试图找出一个数字是否为素数。但是我遇到了“无法检测到无法访问的代码”的错误,我认为这会影响“并非所有代码路径返回值”的错误。错误似乎发生在i ++的for循环中。有人可以帮帮我吗?

static void Main(string[] args)
    {
        Console.WriteLine(isPrime(10));
    }

    public static bool isPrime(int n)
    {
        for (int i = 2; i < n; i++)
        {
            if (n % i == 0)
            {
                return false;
            }
            return true;
        }
    }

2 个答案:

答案 0 :(得分:10)

&#34;检测到无法访问的代码&#34;意味着永远不会执行某些代码。考虑:

int something()
{
  if (true)
    return 1;
  else
    return 2; //Obviously we can never get here
}

&#34;并非所有代码路径都返回值&#34;表示您已经定义了一个带有返回值的方法(例如&#34; bool&#34;在您的示例中),并且该方法有一些方法可以在不返回值的情况下执行。

考虑:

int something(bool someBool)
{
  if (someBool)
    return 1;
  //if someBool == false, then we're not returning anything.  Error!
}

答案 1 :(得分:2)

您的代码有两个问题:

  1. 你在for循环中有return true(在任何条件之外)。因为return会立即退出函数(将控制权返回给调用者),i++循环的for语句将永远不会执行(因此您的错误)。您可能希望将其置于for循环之外。

  2. 进入循环的另一个问题是循环无法保证执行。如果传递的n为2或更小,则完全跳过循环,在这种情况下没有return语句。这是不允许的(因为你总是需要从非void函数返回一个值),所以你得到一个编译器错误。