C# “他们”是什么意思;并非所有代码路径都返回一个值";?

C# “他们”是什么意思;并非所有代码路径都返回一个值";?,c#,C#,-->错误“mineswepper.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) re

-->错误“mineswepper.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;
    }
  }
}
public bool Gewonnen()
{
对于(int y=0;y<\u boolArray.GetLength(0);y++)
{
对于(int x=0;x<\u boolArray.GetLength(1);x++)
{
如果(_boolArray[x,y]==false)
返回false;
其他的
返回true;
}
}
}

这意味着并非所有可能的执行路径都返回值。在您的示例中,循环可能不会执行一次(当
\u boolArray
length为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;
}
public bool Gewonnen()
{
对于(int y=0;y<\u boolArray.GetLength(0);y++)
{
对于(int x=0;x<\u boolArray.GetLength(1);x++)
{
如果(_boolArray[x,y]==false)
返回false;
其他的
返回true;
}
}
返回false;
}

例如,让我们假设您的第一个for循环在某个点上类似于:

for (int y = 0; y < _boolArray.GetLength(0); y++) { }
for(int y=0;y<\u boolArray.GetLength(0);y++){
在这个时间点上,你的布尔雷的长度是0。这将导致

for (int y = 0; y < 0; y++) { }
for(int y=0;y<0;y++){
这意味着这段代码可以立即完成,直到循环结束。但是等等:这个函数应该返回一个布尔值,并且没有任何返回


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

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

public bool Gewonnen()
{
对于(int y=0;y<\u boolArray.GetLength(0);y++)
{
对于(int x=0;x<\u boolArray.GetLength(1);x++)
{
如果(_boolArray[x,y]==false)
返回false;
}
}
return true;//这意味着_boolArray没有假值
}

谢谢,它很有效。但是现在我在我的主类中遇到了另一个问题:while(spiel.Gewonnen=false){Console.WriteLine(“Y koordine?”);int-yeingabe=int.Parse(Console.ReadLine());Console.WriteLine(“X koordine?”);int-xeingabe=int.Parse(Console.ReadLine());spiel.EingabeWeiterLeiter(yeingabe,xeingabe,anzahlMinen);}-->错误:无法分配给“Gewonnen”,因为它是一个“方法组”,它应该重复游戏循环,直到游戏成功。有两个问题。第一,它是
spiel.Gewonnen()
,而不是
spiel.Gewonnen
。第二,它是
=
,而不是
=/code>。您也可以在(!spiel.Gewonnen()){/*do stuff*/}
。请创建另一个问题,因为从注释中读取代码很痛苦。是否确实只想检查第一个成员?您的代码只检查
\u boolArray[0,0]
并立即返回。
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
}