1

What troubles me is that. I cant figure it out. What i need to do is to search for a dude with name 'nazwisko' that is in list 'List'. If there is no such dude then i have to return null; The language is C#.

Any help appreciated.

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

6 回答 6

6

如果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”的家伙。

如果您打算将第一个匹配元素返回到您的搜索字符串,我建议:

Pracownik Search(string nazwisko)
{
      return List.FirstOrDefault(item => item.Name == nazwisko);
}
于 2013-05-30T17:26:09.577 回答
2

您的所有代码路径都没有返回一个值,这就是原因。

   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 是否将为空或空。如果 List 为空/空,您的函数将永远不会返回,因为它永远不会进入返回值的 for 循环内的代码路径。

如果您使用的是 Linq,那么您可以重写为

   Pracownik Search(string nazwisko)
   {
      if(List == null) return null;

      return List.FirstOrDefault(x=> x.someProp.Equals(nazwisko));
   }
于 2013-05-30T17:25:47.273 回答
1
Pracownik Search(string nazwisko)
{
    Pracownik retVal = null;
    foreach (Pracownik pracownik in List)
    {
       if (List.Contains(pracownik))
       {
          retVal = pracownik;
          break;
       }
    }
    return retVal;
}
于 2013-05-30T17:26:35.557 回答
1

您必须考虑这样一个事实,即如果 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;
    }

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

于 2013-05-30T17:28:39.007 回答
0

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

于 2013-05-30T17:28:26.800 回答
0

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

Pracownik Search(string nazwisko)
{
    foreach (Pracownik pracownik in List)
    {
       if (List.Contains(pracownik))
          return pracownik;
    }
    return null;
}
于 2013-05-30T17:32:05.983 回答