并不是所有的代码路径都返回值.使用foreach的方法中的错误消息

本文关键字:方法 foreach 使用 错误 消息 代码 路径 并不是 返回值 | 更新日期: 2023-09-27 18:16:13

让我烦恼的是。我想不明白。我需要做的是搜索一个家伙的名字'nazwisko',这是在列表' list '。如果没有这样的家伙,那么我必须返回null;语言是c#。

感谢您的帮助。

Pracownik Search(string nazwisko)
{
    foreach (Pracownik pracownik in List)
    {
       if (List.Contains(pracownik))
          return pracownik;
       else
          return null;
    }
}

并不是所有的代码路径都返回值.使用foreach的方法中的错误消息

如果List不包含任何元素,则不返回任何内容:

Pracownik Search(string nazwisko)
{
    foreach (Pracownik pracownik in List)
    {
       if (List.Contains(pracownik))
          return pracownik;
       else
          return null;
    }
    // Adding this will correct
    return null;
}

也就是说,不需要foreach,因为实际上总是返回第一个元素。这将做同样的事情:

Pracownik Search(string nazwisko)
{
      return List.FirstOrDefault();
}

我需要做的是搜索一个家伙的名字'nazwisko',这是在列表' list '。

如果你想返回第一个匹配的元素到你的搜索字符串,我建议:

Pracownik Search(string nazwisko)
{
      return List.FirstOrDefault(item => item.Name == nazwisko);
}

您的所有代码路径都没有返回一个值作为原因。

   Pracownik Search(string nazwisko)
    {
       if (List == null) return null; //return if your list is null.
        foreach (Pracownik pracownik in List)
        {
           if (pracownik.someProp.Equals(nazwisko))
              return pracownik;
        }
        return null; //or something here
    }

在这种情况下,编译器不知道List在编译期间是否为null或空。如果List为null/空,则函数永远不会返回,因为它永远不会进入返回值的for循环中的代码路径。

如果你正在使用Linq,那么你可以重写为

   Pracownik Search(string nazwisko)
   {
      if(List == null) return null;
      return List.FirstOrDefault(x=> x.someProp.Equals(nazwisko));
   }

您必须考虑这样一个事实,即在List为空的情况下,foreach语句可能永远不会进一步求值。因此:

 Pracownik Search(string nazwisko)
    {
        foreach (Pracownik pracownik in List)
        {
           if (List.Contains(pracownik))
              return pracownik;
           else
              return null;
        }
    // This is where the other path is.  What should it return if List is null?
     return null;
    }
但是,我会检查函数的语法。我不敢肯定它会完全达到你的目的。 编辑:

Pracownik Search(string nazwisko)
    {
        foreach (Pracownik pracownik in List)
        {
           if (pracownik.Property?.Equals(naxwisko))
              return pracownik;
        }
    // This is where the other path is.  What should it return if List is null?
     return null;
    }

这可能是更好的语法-不确定要比较的属性或您的对象是什么

Pracownik Search(string nazwisko)
{
    Pracownik retVal = null;
    foreach (Pracownik pracownik in List)
    {
       if (List.Contains(pracownik))
       {
          retVal = pracownik;
          break;
       }
    }
    return retVal;
}

不要在foreach循环中使用else,否则如果List中不存在第一个pracownik,您将立即返回null。另外,如果没有使用字符串参数,为什么要传递它?

Pracownik Search(string nazwisko)
{
    foreach (Pracownik pracownik in List)
    {
       if (List.Contains(pracownik))
          return pracownik;
    }
    return null;
}

如果列表为空,则没有返回。这就是为什么需要在foreach循环结束后返回null的原因。如果出现错误,请尝试将接收函数返回值的变量定义为nullable。