"检测到无法访问的代码" C#中的错误消息

时间:2014-11-05 13:57:55

标签: c# if-statement unreachable-code

我正在尝试用C#编写程序来查明数字是否为素数。我使用前两个if语句来挑出许多选项,然后我试图在最后的else语句中嵌套一个循环,它告诉我检测到无法访问的代码'。

public static bool primeNumber ()
    {
        Console.Write ("Please enter a number to see if it is a prime number: ");
        int num = int.Parse (Console.ReadLine ());
        if (num % 2 == 0)
            return false;
        else if (num % 5 == 0)
            return false;
        else {
            for (int i = 3; i < num / 2; i += 2)
            {
                if (num % i == 0)
                    return false;
                else 
                    return true;
            }
        }
    }

2 个答案:

答案 0 :(得分:12)

这里有两个问题:

  • 无法访问的代码
  • 方法不会在所有情况下都返回值

虽然返回值问题是一个错误,并且会阻止编译完成,但无法访问的代码只是一个警告。通过&#34;只是&#34;我的意思是它不一定会停止你的编译,但你应该把它当作一个错误的指示。

让我写一个新的例子来说明这里的实际问题:

public static bool primeNumber (int num)
{
    for (int i = 0; i < num; i++)
    {
        if (i < 10)
            return false;
        else 
            return true;
    }
}

让我们看看这个方法的作用:

  1. 它开始循环
  2. 循环中的第一件事就是检查
  3. 根据此某事,它会返回此或那个。它返回
  4. 因此,它永远不会落到这一步:

    for (int i = 0; i < num; i++)
                             ^^^
    

    这是无法访问的代码。

    其次,你的情况下的编译器无法判断num是否总是一个允许循环运行的值,因此总是返回一些东西。因此,编译器认为你有可能num(在我的例子中它可能是-1)值不允许循环运行,使程序跳过循环,因此我们结束由于另一个错误,该方法应该返回什么?

    如果我们回到你的代码,这是一种重写方法的方法

    public static bool primeNumber ()
    {
        Console.Write ("Please enter a number to see if it is a prime number: ");
        int num = int.Parse (Console.ReadLine ());
        if (num % 2 == 0)
            return false;
        else if (num % 5 == 0)
            return false;
        else {
            for (int i = 3; i < num / 2; i += 2)
            {
                if (num % i == 0)
                    return false;
            }
            return true;
        }
    }
    
    • 如果我们点击一​​个证明测试的数字(即它不是素数),只有 在循环中返回,我们将删除无法访问的代码问题
    • 然后,如果我们设法运行循环完成,我们无法证明它不是素数,因此 是素数,然后我们返回{{ 1}}。

    意见:您不应该有提示用户的功能,然后返回答案。相反,我会写这个(LINQPad程序

    true

答案 1 :(得分:1)

你的for循环在这里没有任何作用,因为它在第一次运行时返回,所以

i += 2

永远不会到达。

您的整个for循环相当于一个return true