我应该返回什么结果?
本文关键字:结果 什么 返回 我应该 | 更新日期: 2023-09-27 18:14:35
我写了一个简单的库,它返回名字列表。
但是,如果我找不到任何东西,我应该返回什么?
return new List<String>();
或
return null;
的例子:
var resultColl=FindNames(...);
这段代码可以从其他组件中使用,我不想破坏它。如果我返回null-我认为这是正确的方式来检查它。但是,也许我应该返回空列表?
谢谢。
您应该始终返回空列表。参见集合指南。
不要从集合属性或方法返回空值返回集合。返回空集合或空数组相反。
返回空列表对于函数的用户来说更方便:
foreach (string name in FindNames(...))
{
Display(name);
}
返回null强制调用者编写额外的代码:
- 为null的测试,和
一个额外的局部变量(为了避免调用你的函数两次)
List<string> names = FindNames(...); if (names != null) { foreach (string name in names) { Display(name); } }
所以返回一个空列表比较好。
我会返回Enumerable.Empty<string>()
,或者如果你的方法应该返回一个列表,做return new List<string>()
。如果你有很多需要返回空列表的情况,你可以创建一个每次都返回的静态列表,这将阻止每次都必须创建新的空列表,正如@YuvalItzchakov
所指出的。
空集合比null
更好,因为在我看来,它会导致更干净的代码。
调用代码很可能想要迭代列表,或者对list做一些事情。通过返回空List,调用代码应该可以正常工作。如果你返回null,那么调用代码必须确保它们首先有一个列表。
这可能只是一个偏好问题,但是返回一个空列表会得到我的投票…你在返回合同规定的东西
从设计的角度来看,返回空集合更好,因为客户端代码不需要执行空检查。
这取决于代码的语义。
如果没有结果是可接受的结果,那么你应该返回一个空集合。
如果没有结果是错误条件,则返回null
我建议你在没有任何回报的情况下保持一致。这样你就知道,无论你打什么电话,都不会得到同样的回应。例如知道您将始终返回空集合或空字符串或0等。
你如何处理你拥有的其他库项?
更详细的答案是Tuple<bool, List<string>>
。这是一个明确的解决方案,可以修改为包含有关搜索的其他详细信息:
var thereAreResults = foundList.Count > 0;
return new Tuple<bool, List<String>>(thereAreResults, foundList);