3

您能否解释一下我应该如何避免此警告: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”?也许这是一个智障问题,但我被困在这里。谢谢。

4

5 回答 5

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();
            }
 }
于 2014-01-13T14:13:43.217 回答
4

return 语句在这里退出函数。

所以 x,y,z 和结果的声明,Console.Write永远不会运行......

于 2014-01-13T14:09:02.117 回答
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% 的速度运行并填满完全保存函数调用的内存部分。

于 2014-01-13T14:11:46.443 回答
0

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

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

通常,return 语句是函数中的最后一条指令。

于 2014-01-13T14:12:41.910 回答
0

return 语句之后的任何语句都是不可访问的。它永远不会被执行,编译器会通知你。

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

无法访问的语句 MSDN

于 2014-01-13T14:10:01.323 回答