2

--> 错误“Minesweeper.Game.Gewonnen()”:并非所有代码路径都返回值。

我在做什么错?

public bool Gewonnen()
{

  for (int y = 0; y < _boolArray.GetLength(0); y++)
  {
    for (int x = 0; x < _boolArray.GetLength(1); x++)
    {
      if (_boolArray[x, y] == false)
        return false;

      else
        return true;
    }
  }
}
4

3 回答 3

8

这意味着并非所有可能的执行路径都返回值。在您的示例中,循环甚至可能不会执行一次(当_boolArray长度为 0 时),如果发生这种情况,您的方法将不会返回任何内容。return false在方法末尾添加:

public bool Gewonnen() 
{
    for (int y = 0; y < _boolArray.GetLength(0); y++)
    {
         for (int x = 0; x < _boolArray.GetLength(1); x++)
         {
              if (_boolArray[x, y] == false)
                  return false;
              else
                  return true;
         }
    }

    return false;
}
于 2013-11-07T09:20:20.183 回答
1

gzaxx 解决方案将编译。无论如何,我不确定它是否是您想要的,因为在这种情况下,它总是会在第一次迭代后返回(如果有的话)。这是另一个尝试(我希望它有所帮助):

public bool Gewonnen()
{

  for (int y = 0; y < _boolArray.GetLength(0); y++)
  {
    for (int x = 0; x < _boolArray.GetLength(1); x++)
    {
      if (_boolArray[x, y] == false)
        return false;
    }
  }

  return true;  //this mean _boolArray has no false value
}
于 2013-11-07T09:28:00.377 回答
0

例如,假设您的第一个 for 循环在某些时候类似于:

for (int y = 0; y < _boolArray.GetLength(0); y++) { }

并且在那个时间点你的 _boolArray 的长度为 0。然后它会导致

for (int y = 0; y < 0; y++) { }

这意味着它会立即使用这段代码完成,直到循环结束。但是等等:这个函数应该返回一个布尔值,并且没有任何返回。

简而言之,这就是“并非所有代码路径都返回值”的意思。您不允许有任何(不太可能?)的值组合,这些值会使您结束函数而不返回函数中的 Mentoin 类型的值(boolean在这种情况下)

于 2013-11-07T09:24:35.063 回答