并不是所有的代码路径都返回值.使用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;
}
}
如果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。