让我感到困扰的是。我弄清楚了。我需要做的是搜索列表'列表'中名为'nazwisko'的家伙。如果没有这样的家伙那么我必须返回null;语言是C#。
任何帮助表示感谢。
Pracownik Search(string nazwisko)
{
foreach (Pracownik pracownik in List)
{
if (List.Contains(pracownik))
return pracownik;
else
return null;
}
}
答案 0 :(得分:5)
如果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();
}
我需要做的是搜索列表'List'中名为'nazwisko'的家伙。
如果您打算将第一个匹配元素返回到搜索字符串,我建议:
Pracownik Search(string nazwisko)
{
return List.FirstOrDefault(item => item.Name == nazwisko);
}
答案 1 :(得分: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是否为null或为空。如果List为null / empty,则函数永远不会返回,因为它永远不会进入返回值的for循环内的代码路径。
如果您使用的是Linq,则可以重写为
Pracownik Search(string nazwisko)
{
if(List == null) return null;
return List.FirstOrDefault(x=> x.someProp.Equals(nazwisko));
}
答案 2 :(得分:1)
Pracownik Search(string nazwisko)
{
Pracownik retVal = null;
foreach (Pracownik pracownik in List)
{
if (List.Contains(pracownik))
{
retVal = pracownik;
break;
}
}
return retVal;
}
答案 3 :(得分:0)
如果列表为空,则不会返回。这就是为什么你需要在foreach循环结束后返回null。 如果出现错误,请尝试将接收函数返回的变量定义为可为空。
答案 4 :(得分:0)
您必须考虑以下事实:如果List为null,则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;
}
这可能是更好的语法 - 不确定要比较的属性或对象是什么。
答案 5 :(得分:0)
你不希望在foreach循环中使用else,否则如果List中不存在第一个pracownik,你将立即返回null。另外,如果没有使用它,为什么要传递字符串参数?
Pracownik Search(string nazwisko)
{
foreach (Pracownik pracownik in List)
{
if (List.Contains(pracownik))
return pracownik;
}
return null;
}