检测到无法访问的代码C#(绝对初学者)

时间:2014-01-13 14:07:29

标签: c# unreachable-code

您能否解释我应该如何避免此警告:Visual Studio 2010 Express中“检测到无法访问的代码”?我正在从手册中学习C#。 这是一个创建简单方法的练习。我正如书中所写的那样进入这个例子。感谢。

public class Multiply 
{
    //Multiplies argument by 4 

    public static int MultiplyBy4(int aNumber)
    {
        return 4 * aNumber;
        //Shows ways of passing various arguments to a method public static void Main
        int x = 7;
        int y = 20;
        int z = -3;
        int result = 0;

        result = MultiplyBy4(x);
        Console.WriteLine("Passsing a variable, x : {0}", result);

        result = MultiplyBy4(y + 2);
        Console.WriteLine("Passing an expression, Y + 2: {0}", result);

        result = 5 + MultiplyBy4(z);
        Console.WriteLine("Using MultiplyBy4 in an expression: {0}", result);
        Console.ReadLine();
    }
 }

我不懂手册评论: “在使用参数和返回值创建方法后,显示将各种参数传递给方法public static void Main的方法。 如何使MultiplyBy4方法将x,y,z识别为“aNumber”? 也许这是一个迟钝的问题,但我被困在这里。 感谢。

5 个答案:

答案 0 :(得分:8)

注释行混乱并包含Main方法的定义。代码应为:

    public class Multiply 
{
        //Multiplies argument by 4 
        public static int MultiplyBy4(int aNumber)
        {
            return 4 * aNumber;
        }

        //Shows ways of passing various arguments to a method
        public static void Main(string[] args)
        {
                int x = 7;
                int y = 20;
                int z = -3;
                int result = 0;

                result = MultiplyBy4(x);
                Console.WriteLine("Passsing a variable, x : {0}", result);

                result = MultiplyBy4(y + 2);
                Console.WriteLine("Passing an expression, Y + 2: {0}", result);

                result = 5 + MultiplyBy4(z);
                Console.WriteLine("Using MultiplyBy4 in an expression: {0}", result);
                Console.ReadLine();
            }
 }

答案 1 :(得分:4)

return语句退出此处的函数。

因此x,y,z和result以及Console.Write的声明永远不会运行......

答案 2 :(得分:0)

返回语句后的任何语句都无法访问。它永远不会被执行,编译器会通知你。

如果语句因无法访问而无法执行,则为编译时警告

Unreachable Statements MSDN

答案 3 :(得分:0)

这是因为代码将无法运行函数的每一行,因为在函数中的代码之前退出函数:

   public class Multiply 
  {
//Multiplies argument by 4 

           public static int MultiplyBy4(int aNumber)
            {
                return 4 * aNumber; // <---- You exit the function MultiplyBy4 here

               // Everything beneath this line will never get executed
               // --------------------------------------

//Shows ways of passing various arguments to a method public static void Main
                int x = 7;
                int y = 20;
                int z = -3;
                int result = 0;

                result = MultiplyBy4(x);
                Console.WriteLine("Passsing a variable, x : {0}", result);

                result = MultiplyBy4(y + 2);
                Console.WriteLine("Passing an expression, Y + 2: {0}", result);

                result = 5 + MultiplyBy4(z);
                Console.WriteLine("Using MultiplyBy4 in an expression: {0}", result);
                Console.ReadLine();
            }
 }

这是编译器检测到并警告你的内容,因为在大多数情况下这是编码错误。

如果您要移动return语句并在函数末尾退出函数,那么您的代码也会导致StackOverflow(我们在SO:P上有多讽刺)。通过调用MultiplyBy4(z);

,您将导致永无止境的递归

这会导致处理器达到100%并填充完全保存函数调用的内存部分。

答案 4 :(得分:0)

正如cubitouch所说,return语句在函数中停止执行。

如果在if子句中包含多个return语句,则可以使用多个return语句。但至少有一个返回语句必须在可以从任何地方到达的函数中(例如,没有条件满足)

一般来说,return语句是函数中的最后一条指令。