C#方法错误:检测到无法访问的代码,并非所有代码路径都返回值“

时间:2017-08-17 08:37:30

标签: c#

static class Util
{
    static Random ran = new Random();

    public static List<Point3d> RandomptGenerator(int num)
    {
        List <Point3d> ptList = new List<Point3d>();
        int count = num;

        for (int i = 0;i < count;i++)
        {
            for (int j = 0;j < count;j++)
            {
                double x = i;
                double y = j;

                x = ran.Next(0, 40);
                y = ran.Next(0, 30);

                ptList.Add(new Point3d(x, y, 0.0));

                return ptList;
            }
        }
    }
}

大家好,

当我尝试编译此代码时,我收到以下错误:

  1. 检测到无法访问的代码
  2. 并非所有代码路径都返回值
  3. 我无法弄清楚为什么会发生这种情况......任何帮助都将受到赞赏。 谢谢!

8 个答案:

答案 0 :(得分:3)

在你的代码中,你将在for循环中返回ptList。如果count为0,你将永远不会进入循环,会发生什么。

move return ptList;在循环之外。

答案 1 :(得分:2)

该函数应返回Point3d对象的List。但是不能保证for循环条件是真的(i&lt; count)并且根本就会达到return语句。这就是编译器抱怨的原因。

您应该将循环语句移动到循环之外,如下所示:

public static List<Point3d> RandomptGenerator(int num)
    {
        List<Point3d> ptList = new List<Point3d>();
        int count = num;

        for (int i = 0; i < count; i++)
        {
            for (int j = 0; j < count; j++)

            {
                double x = i;
                double y = j;

                x = ran.Next(0, 40);
                y = ran.Next(0, 30);

                ptList.Add(new Point3d(x, y, 0.0));
            }
        }

        return ptList;
    }

答案 2 :(得分:1)

您的函数应该返回List<Point3d>。将它返回到循环之外

List<Point3d> ptList = new List<Point3d>();
int count = num;
for (int i = 0; i < count; i++)
{
    for (int j = 0; j < count; j++)
    {
        double x = i;
        double y = j;

        x = ran.Next(0, 40);
        y = ran.Next(0, 30);
        ptList.Add(new Point3d(x, y, 0.0));

    }

}
return ptList;

答案 3 :(得分:0)

如果你想生成num个随机点(请注意,在你当前的代码中你创建了num * num个点),你所要做的就是

static class Util
{
    static Random ran = new Random();

    public static List<Point3d> RandomptGenerator(int num)
    {
      // Create list...
      List <Point3d> ptList = new List<Point3d>();

      // ...fill it with values...
      for (int i = 0;i < count; i++) 
          ptList.Add(new Point3d(ran.Next(0, 40), ran.Next(0, 30), 0.0));

      // ...return the list
      return ptList;   
   }
}

通常,我们使用 Linq 为我们生成列表:

using System.Linq

...

static class Util
{
    static Random ran = new Random();

    public static List<Point3d> RandomptGenerator(int num)
    {
      return Enumerable
        .Range(0, num)
        .Select(_ => new Point3d(ran.Next(0, 40), ran.Next(0, 30), 0.0))
        .ToList();
   }
} 

答案 4 :(得分:0)

如果&#34;计数&#34;是0,它甚至不会在第一。因为i = 0且i&lt; 0为假。

试试这样:

    @EnableJpaRepositories
    private static class EnableJpaRepositoriesConfiguration {

    }

答案 5 :(得分:0)

应该是bE:

public static List<Point3d> RandomptGenerator(int num)
    {
      List <Point3d> ptList = new List<Point3d>();
      int count = num;

      for (int i = 0;i < count;i++)
      {
        for (int j = 0;j < count;j++)
        {
          double x = i;
          double y = j;

          x = ran.Next(0, 40);
          y = ran.Next(0, 30);

          ptList.Add(new Point3d(x, y, 0.0));

        }
      }
     return ptList;   //<------Must be here!
   }

答案 6 :(得分:0)

代码的问题是for循环。

它不会达到您的返回值。

如果您的值小于零。

<强>实施例

count =0;
for (int i = 0;i < count;i++) // the loop will end. when count is zero.

与你的内循环相同:

count =0;
for (int j = 0;j < count;j++) // the loop will end. when count is zero.

这就是你遇到错误的原因

  
    

检测到无法访问的代码,并非所有代码路径都返回值

  

您可以使用以下代码进行修复:

static Random ran = new Random();
public static List<Point3d> RandomptGenerator(int num)
{
  var <Point3d> ptList = new List<Point3d>();
  int count = num; 
  for (int i = 0;i < count;i++)
  {
    for (int j = 0;j < count;j++)
    {
      double x = i;
      double y = j;
      x = ran.Next(0, 40);
      y = ran.Next(0, 30);
      ptList.Add(new Point3d(x, y, 0.0));
    }
  }
  return ptList;
}

答案 7 :(得分:0)

完美,返回ptList;处于错误的位置......这解决了问题,显然它是有道理的。

谢谢大家的回答