Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用foreach的方法中出现“并非所有代码路径都返回值”错误消息_C# - Fatal编程技术网

C# 使用foreach的方法中出现“并非所有代码路径都返回值”错误消息

C# 使用foreach的方法中出现“并非所有代码路径都返回值”错误消息,c#,C#,让我烦恼的是。我想不出来。我需要做的是搜索一个名字叫“纳兹维斯科”的家伙,这个名字在“名单”中。如果没有这样的家伙,那么我必须返回null;语言是C 谢谢你的帮助 Pracownik Search(string nazwisko) { foreach (Pracownik pracownik in List) { if (List.Contains(pracownik)) return pracownik; else

让我烦恼的是。我想不出来。我需要做的是搜索一个名字叫“纳兹维斯科”的家伙,这个名字在“名单”中。如果没有这样的家伙,那么我必须返回null;语言是C

谢谢你的帮助

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

您的所有代码路径都不会返回作为原因的值

   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
    }
在这种情况下,编译器不知道列表在编译期间是空的还是空的。如果case List为null/empty,则函数永远不会返回,因为它永远不会进入for循环中返回值的代码路径

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

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

      return List.FirstOrDefault(x=> x.someProp.Equals(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
    }
在这种情况下,编译器不知道列表在编译期间是空的还是空的。如果case List为null/empty,则函数永远不会返回,因为它永远不会进入for循环中返回值的代码路径

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

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

      return List.FirstOrDefault(x=> x.someProp.Equals(nazwisko));
   }
如果列表不包含任何元素,则不返回任何内容:

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();
}
我需要做的是搜索一个名字叫“纳兹维斯科”的家伙,这个名字在“名单”中

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

Pracownik Search(string nazwisko)
{
      return List.FirstOrDefault(item => item.Name == nazwisko);
}
如果列表不包含任何元素,则不返回任何内容:

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();
}
我需要做的是搜索一个名字叫“纳兹维斯科”的家伙,这个名字在“名单”中

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

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

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

如果列表为空,则不会返回。这就是为什么需要在foreach循环结束后返回null。
如果你得到一个错误,尝试定义接收函数返回到空值的变量。

你必须考虑一个事实,即在列表为null的情况下,不可能进一步评估FACEACH语句。因此:

 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;
    }
不过,我会检查函数的语法。我不确定它会完全符合你的意图

编辑:


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

你必须考虑的事实是,在列表为空的情况下,不可能进一步评估FACEACH语句。因此:

 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;
    }
不过,我会检查函数的语法。我不确定它会完全符合你的意图

编辑:


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

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

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

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

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

我们是否可以看到list declarationPut返回null;在foreach代码块之后,查看错误消息是否消失;列表将始终包含该项,因为您从列表中获取该项时,会禁止自定义比较器把戏或从另一个线程进行操作,因此if检查和else没有意义。您永远不会碰到else返回null大小写。List.containsRapCownik将始终为true-因为它是列表中的一个值。?如果列表为空并且foreach块被跳过,您认为会发生什么?我们可以看到List declarationPut返回null;在foreach代码块之后,查看错误消息是否消失;列表将始终包含该项,因为您从列表中获取该项时,会禁止自定义比较器把戏或从另一个线程进行操作,因此if检查和else没有意义。您永远不会碰到else返回null大小写。List.containsRapCownik将始终为真-因为它是列表中的一个值。?如果列表为空且foreach块被跳过,您认为会发生什么?这可能就是答案,但这并不能真正解释为什么编译器不能找出代码永远不会在foreach之后执行。-1表示不正确的foreachsyntax@RobertHarvey如果列表中没有元素怎么办?如果列表为空,则抛出一个ex

异常,因此不需要返回值。如果列表为空,这只是一个问题。另外,请正确设置代码的格式。这可能是答案,但它并不能真正解释为什么编译器无法确定代码永远不会执行超过foreach。-1表示错误的foreachsyntax@RobertHarvey如果列表中没有元素怎么办?如果列表为空,则抛出异常,因此不需要返回值。只有列表为空时才有问题。此外,请正确格式化代码。这仍然不能真正修复代码。您刚刚从列表中获得了该项,因此列表显然将包含它。除非真的有人为的例外,否则if总是正确的。它将在以后使用。@Servy-Wow,我不知道我怎么会没有注意到这一点。我只是想纠正这个错误。但是你是对的,看起来我们应该做一些事情,比如如果pracownik.SomeProp==nazwisko或其他什么……这仍然不能真正修复代码。您刚刚从列表中获得了该项,因此列表显然将包含它。除非真的有人为的例外,否则if总是正确的。它将在以后使用。@Servy-Wow,我不知道我怎么会没有注意到这一点。我只是想纠正这个错误。但是你是对的,看起来我们应该做一些事情,比如说,如果pracownik.SomeProp==nazwisko或者其他什么……不。我需要做的是从名单中找到一个特定的人。如果没有我要找的人,那么我必须返回null。所以会有其他人,但我需要一个具体的:@Iska这就是我最后一段代码的作用。它返回第一个拥有与nazwisko匹配的Name属性的人。nazwisko是一个变量,因此它可以是aaa SDADS derad等的任何内容。@Iska Yes-我的上一个版本将根据该字符串检查Pracownik上的Name属性-并返回匹配的Pracownik成员,如果没有匹配,则返回null。否。我需要做的是从名单中找到一个特定的人。如果没有我要找的人,那么我必须返回null。所以会有其他人,但我需要一个具体的:@Iska这就是我最后一段代码的作用。它返回第一个拥有与nazwisko匹配的Name属性的人。nazwisko是一个变量,因此它可以是aaa sdasd derad等的任何内容。@Iska Yes-我的上一个版本根据该字符串检查Pracownik上的Name属性-并返回匹配的Pracownik成员,如果没有匹配,则返回null。foreach后返回null不会给我任何错误,但它不会总是这样给我空值吗?不会。只有当列表为空时,该路径才会返回空值。但是检查你的语法。。我将更新我的答案。foreach之后使用return null不会给我任何错误,但它不会总是这样给我null吗?不。如果列表为null,该路径将只返回null。但是检查你的语法。。我会更新我的答案。